最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Android實(shí)現(xiàn)手繪功能

 更新時(shí)間:2020年05月29日 11:49:04   作者:lxb_android  
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)手繪功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

本文實(shí)例為大家分享了Android實(shí)現(xiàn)手繪功能的具體代碼,供大家參考,具體內(nèi)容如下

布局文件如下

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:app="http://schemas.android.com/apk/res-auto"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context="com.example.administrator.main.DrawActivity">
 
 <ImageView
  android:id="@+id/iv"
  android:layout_width="1200px"
  android:layout_height="1500px"
  android:layout_alignParentLeft="true"
  android:layout_alignParentRight="true"
  android:layout_alignParentStart="true" />
 
 <LinearLayout
  android:id="@+id/linearLayout4"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_gravity="center_horizontal"
  android:orientation="horizontal">
 
 </LinearLayout>
 
 <Button
  android:id="@+id/btn_resume"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_alignParentEnd="true"
  android:layout_marginEnd="79dp"
  android:text="重繪" />
 
 <Button
  android:id="@+id/btn_save"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignBottom="@+id/linearLayout4"
  android:layout_marginStart="91dp"
  android:layout_toEndOf="@+id/linearLayout4"
  android:text="保存" />
</RelativeLayout>

Activity代碼如下,其中線的顏色,寬度等屬性都可以修改。

package com.example.administrator.main;
 
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Environment;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;
 
import java.io.File;
import java.io.FileOutputStream;
 
public class DrawActivity extends AppCompatActivity {
 private ImageView iv;
 private Bitmap baseBitmap;
 private Button btn_resume;
 private Button btn_save;
 private Canvas canvas;
 private Paint paint;
 
 float radio;
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_draw);
  radio = 10;
  iv = (ImageView) findViewById(R.id.iv);
  // 初始化一個(gè)畫筆,筆觸寬度為5,顏色為紅色
  paint = new Paint();
  paint.setStrokeWidth(radio);
  paint.setColor(Color.BLACK);
  iv = (ImageView) findViewById(R.id.iv);
  btn_resume = (Button) findViewById(R.id.btn_resume);
  btn_save = (Button) findViewById(R.id.btn_save);
 
  btn_resume.setOnClickListener(click);
  btn_save.setOnClickListener(click);
  iv.setOnTouchListener(touch);
 }
 
 private View.OnTouchListener touch = new View.OnTouchListener() {
  // 定義手指開始觸摸的坐標(biāo)
  float startX;
  float startY;
 
  @Override
  public boolean onTouch(View v, MotionEvent event) {
   switch (event.getAction()) {
    // 用戶按下動(dòng)作
    case MotionEvent.ACTION_DOWN:
     // 第一次繪圖初始化內(nèi)存圖片,指定背景為白色
     if (baseBitmap == null) {
      baseBitmap = Bitmap.createBitmap(iv.getWidth(),
        iv.getHeight(), Bitmap.Config.ARGB_8888);
      canvas = new Canvas(baseBitmap);
      canvas.drawColor(Color.WHITE);
     }
     // 記錄開始觸摸的點(diǎn)的坐標(biāo)
     startX = event.getX();
     startY = event.getY();
     break;
    // 用戶手指在屏幕上移動(dòng)的動(dòng)作
    case MotionEvent.ACTION_MOVE:
     // 記錄移動(dòng)位置的點(diǎn)的坐標(biāo)
     float stopX = event.getX();
     float stopY = event.getY();
 
     Thread t = new Thread(new Runnable() {
      @Override
      public void run() {
       radio += 0.1;
 
       try {
        Thread.sleep(1000);
       } catch (InterruptedException e) {
        e.printStackTrace();
       }
      }
     });
     t.start();
 
     paint.setStrokeWidth(radio);
     //根據(jù)兩點(diǎn)坐標(biāo),繪制連線
     canvas.drawLine(startX, startY, stopX, stopY, paint);
 
     // 更新開始點(diǎn)的位置
     startX = event.getX();
     startY = event.getY();
     // 把圖片展示到ImageView中
     iv.setImageBitmap(baseBitmap);
     break;
    case MotionEvent.ACTION_UP:
     radio = 5;
     break;
    default:
     break;
   }
   return true;
  }
 };
 private View.OnClickListener click = new View.OnClickListener() {
 
  @Override
  public void onClick(View v) {
   switch (v.getId()) {
    case R.id.btn_save:
     saveBitmap();
     break;
    case R.id.btn_resume:
     resumeCanvas();
     break;
    default:
     break;
   }
  }
 };
 
 /**
  * 保存圖片到SD卡上
  */
 protected void saveBitmap() {
  try {
   // 保存圖片到SD卡上
   String fileName = "/sdcard/"+System.currentTimeMillis() + ".png";
   File file = new File(fileName);
   FileOutputStream stream = new FileOutputStream(file);
   baseBitmap.compress(Bitmap.CompressFormat.PNG, 100, stream);
   Toast.makeText(DrawActivity.this, "保存圖片成功", Toast.LENGTH_SHORT).show();
    // Android設(shè)備Gallery應(yīng)用只會在啟動(dòng)的時(shí)候掃描系統(tǒng)文件夾
    // 這里模擬一個(gè)媒體裝載的廣播,用于使保存的圖片可以在Gallery中查看
   Intent intent = new Intent();
   intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
   intent.setData(Uri.fromFile(Environment
     .getExternalStorageDirectory()));
   sendBroadcast(intent);
  } catch (Exception e) {
   Toast.makeText(DrawActivity.this, "保存圖片失敗", Toast.LENGTH_SHORT).show();
   e.printStackTrace();
  }
 }
 
 // 手動(dòng)清除畫板的繪圖,重新創(chuàng)建一個(gè)畫板
 protected void resumeCanvas() {
  if (baseBitmap != null) {
   baseBitmap = Bitmap.createBitmap(iv.getWidth(),
     iv.getHeight(), Bitmap.Config.ARGB_8888);
   canvas = new Canvas(baseBitmap);
   canvas.drawColor(Color.WHITE);
   iv.setImageBitmap(baseBitmap);
   Toast.makeText(DrawActivity.this, "清除畫板成功,可以重新開始繪圖", Toast.LENGTH_SHORT).show();
  }
 }
}

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Flutter組件生命周期和App生命周期示例解析

    Flutter組件生命周期和App生命周期示例解析

    這篇文章主要為大家介紹了Flutter組件生命周期和App生命周期示例解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Android ContentProvider基礎(chǔ)應(yīng)用詳解

    Android ContentProvider基礎(chǔ)應(yīng)用詳解

    ContentProvider是android四大組件之一。它是不同應(yīng)用程序之間交換數(shù)據(jù)的標(biāo)準(zhǔn)api,ContentProvider以某種uri的形式對外提供數(shù)據(jù),允許其它應(yīng)用程序?qū)ζ湓L問或者修改數(shù)據(jù)。本文將介紹ContentProvider的基礎(chǔ)應(yīng)用,感興趣的可以學(xué)習(xí)一下
    2021-12-12
  • Android小程序?qū)崿F(xiàn)選項(xiàng)菜單

    Android小程序?qū)崿F(xiàn)選項(xiàng)菜單

    這篇文章主要為大家詳細(xì)介紹了Android小程序?qū)崿F(xiàn)選項(xiàng)菜單,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-05-05
  • android將圖片轉(zhuǎn)換存到數(shù)據(jù)庫再從數(shù)據(jù)庫讀取轉(zhuǎn)換成圖片實(shí)現(xiàn)代碼

    android將圖片轉(zhuǎn)換存到數(shù)據(jù)庫再從數(shù)據(jù)庫讀取轉(zhuǎn)換成圖片實(shí)現(xiàn)代碼

    有時(shí)候我們想把圖片存入到數(shù)據(jù)庫中,盡管這不是一種明智的選擇,但有時(shí)候還是不得以會用到,下面說說將圖片轉(zhuǎn)換成byte[]數(shù)組存入到數(shù)據(jù)庫中去,并從數(shù)據(jù)庫中取出來轉(zhuǎn)換成圖像顯示出來
    2013-11-11
  • Android關(guān)于獲取時(shí)間的記錄(小結(jié))

    Android關(guān)于獲取時(shí)間的記錄(小結(jié))

    這篇文章主要介紹了Android關(guān)于獲取時(shí)間的記錄(小結(jié)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • Android實(shí)現(xiàn)QQ搶紅包插件

    Android實(shí)現(xiàn)QQ搶紅包插件

    這篇文章主要介紹了Android實(shí)現(xiàn)QQ搶紅包插件,可以支持搶QQ拼手氣紅包,普通紅包,口令紅包,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 安卓逆向分析之酷狗signature案例分享

    安卓逆向分析之酷狗signature案例分享

    這篇文章主要為大家介紹了安卓逆向分析之酷狗signature的案例分享,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步
    2022-02-02
  • Android開發(fā)之ContentProvider的使用詳解

    Android開發(fā)之ContentProvider的使用詳解

    本篇文章介紹了Android開發(fā)之ContentProvider的使用詳解。需要的朋友參考下
    2013-04-04
  • Android開發(fā)中Activity的生命周期及加載模式詳解

    Android開發(fā)中Activity的生命周期及加載模式詳解

    這篇文章主要介紹了Android開發(fā)中Activity的生命周期及加載模式詳解的相關(guān)資料,非常不錯(cuò)具有參考借鑒價(jià)值,需要的朋友可以參考下
    2016-05-05
  • Android開發(fā)之ProgressDialog進(jìn)度對話框用法示例

    Android開發(fā)之ProgressDialog進(jìn)度對話框用法示例

    這篇文章主要介紹了Android開發(fā)之ProgressDialog進(jìn)度對話框用法,簡單介紹了ProgressDialog進(jìn)度對話框常見函數(shù)功能,并結(jié)合實(shí)例形式分析了ProgressDialog組件創(chuàng)建及使用進(jìn)度對話框相關(guān)操作技巧,需要的朋友可以參考下
    2019-03-03

最新評論

武城县| 大埔区| 长海县| 太和县| 万全县| 图木舒克市| 冷水江市| 舞钢市| 南充市| 伊川县| 鞍山市| 赤城县| 华容县| 昔阳县| 潼南县| 赣榆县| 浠水县| 耿马| 万宁市| 榆社县| 襄垣县| 威宁| 郓城县| 台前县| 黑水县| 历史| 二手房| 上犹县| 济南市| 和顺县| 哈巴河县| 榆林市| 永寿县| 柘城县| 河南省| 琼结县| 黄冈市| 普陀区| 老河口市| 余姚市| 疏勒县|