1. 程式人生 > 程式設計 >Android實現簡單畫圖畫板

Android實現簡單畫圖畫板

本文例項為大家分享了Android實現簡單畫圖畫板的具體程式碼,供大家參考,具體內容如下

效果如圖:

Android實現簡單畫圖畫板

佈局檔案:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
 xmlns:tools="http://schemas.android.com/tools"
 android:layout_width="match_parent"
 android:layout_height="match_parent"
 tools:context=".MainActivity">
 
 <ImageView
  android:id="@+id/iv"
  android:layout_width="600px"
  android:layout_height="900px"
  android:layout_alignParentLeft="true"
  android:layout_alignParentRight="true"
  android:layout_alignParentStart="true" />
 
 <LinearLayout
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:layout_gravity="center_horizontal"
  android:orientation="horizontal">
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="red"
   android:text="紅色" />
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="green"
   android:text="綠色"
    />
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="brush"
   android:text="刷子"
   />
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="eraser"
   android:text="橡皮擦"
    />
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="save"
   android:text="儲存" />
 
  <Button
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:onClick="cancel"
   android:text="取消" />
 </LinearLayout>
 
</RelativeLayout>

MainActivity.java

package com.example.yulongji.android10;
 
import android.app.Activity;
import android.content.Intent;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Matrix;
import android.graphics.Paint;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
 
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
 
 
public class MainActivity extends Activity {
 
 private ImageView iv;
 //原圖
 private Bitmap bitsrc;
 //拷貝圖
 private Bitmap bitcopy;
 private Canvas canvas;
 private Paint paint;
 private int startX;
 private int startY;
 
 
 
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_main);
  iv = (ImageView) findViewById(R.id.iv);
  setBitmap();
 
  // 設定觸控偵聽
  iv.setOnTouchListener(new View.OnTouchListener() {
 
   // 觸控式螢幕幕時,觸控事件產生時,此方法呼叫
   @Override
   public boolean onTouch(View v,MotionEvent event) {
    int action = event.getAction();
    switch (action) {
     // 使用者手指摸到螢幕
     case MotionEvent.ACTION_DOWN:
      startX = (int) event.getX();
      startY = (int) event.getY();
      break;
     // 使用者手指正在滑動
     case MotionEvent.ACTION_MOVE:
      int x = (int) event.getX();
      int y = (int) event.getY();
      canvas.drawLine(startX,startY,x,y,paint);
      // 每次繪製完畢之後,本次繪製的結束座標變成下一次繪製的初始座標
      startX = x;
      startY = y;
      iv.setImageBitmap(bitcopy);
      break;
     // 使用者手指離開螢幕
     case MotionEvent.ACTION_UP:
      break;
 
    }
    // true:告訴系統,這個觸控事件由我來處理
    // false:告訴系統,這個觸控事件我不處理,這時系統會把觸控事件傳遞給imageview的父節點
    return true;
   }
  });
 }
 
 public void setBitmap() {
  // 載入畫畫板的背景圖
 bitsrc = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
  // 建立圖片副本
  // 1.在記憶體中建立一個與原圖一模一樣大小的bitmap物件,建立與原圖大小一致的白紙
  bitcopy = Bitmap.createBitmap(bitsrc.getWidth(),bitsrc.getHeight(),bitsrc.getConfig());
  // 2.建立畫筆物件
  paint = new Paint();
  // 3.建立畫板物件,把白紙鋪在畫板上
  canvas = new Canvas(bitcopy);
  // 4.開始作畫,把原圖的內容繪製在白紙上
  canvas.drawBitmap(bitsrc,new Matrix(),paint);
  // 5.將繪製的圖放入imageview中
  iv.setImageBitmap(bitcopy);
 }
 
 public void red(View view){
  paint.setColor(Color.RED);
 }
 public void green(View view){
  paint.setColor(Color.GREEN);
 }
 public void brush(View view){
  paint.setStrokeWidth(8);
 }
 public void cancel(View view){
  setBitmap();
 }
 public void eraser(View view){
  paint.setColor(Color.rgb(243,243,243));
 
  paint.setStrokeWidth(30);
 }
 
 public void save(View view){
  String path = Environment.getExternalStorageDirectory() + "/" + "2.png";
  File file = new File(path);
  try {
   FileOutputStream fos = new FileOutputStream(file);
   bitcopy.compress(Bitmap.CompressFormat.PNG,100,fos);
  } catch (FileNotFoundException e) {
   e.printStackTrace();
  }
  // 傳送sd卡就緒廣播
  Intent intent = new Intent();
  intent.setAction(Intent.ACTION_MEDIA_MOUNTED);
  intent.setData(Uri.fromFile(Environment.getExternalStorageDirectory()));
  sendBroadcast(intent);
 }
 
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。