畫紙上畫線
阿新 • • 發佈:2018-12-19
佈局檔案 activity_main
<?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=".MainActivity"> <ImageView android:id="@+id/iv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentEnd="true" android:layout_alignParentRight="true" android:layout_marginEnd="66dp" android:layout_marginRight="66dp" android:src="@drawable/bg" /> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:layout_alignParentBottom="true"> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="紅色" android:onClick="red"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="綠色" android:onClick="green"/> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="刷子" android:onClick="brush" /> <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="儲存" android:onClick="save"/> </LinearLayout> </RelativeLayout>
主程式碼 MainActivity
package com.bwie.mxy181101; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.graphics.Canvas; import android.graphics.Matrix; import android.graphics.Paint; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.MotionEvent; import android.view.View; import android.widget.ImageView; public class MainActivity extends AppCompatActivity { private Bitmap bmCopy; private Canvas mCanvas; private ImageView iv; //按下座標 private int startX; private int startY; //移動座標 private int newX; private int newY; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //初始化控制元件 iv = findViewById(R.id.iv); //載入原圖 Bitmap bmSrc = BitmapFactory.decodeResource(getResources(), R.drawable.bg); //建立白紙,設定寬高圖片引數 bmCopy = Bitmap.createBitmap(bmSrc.getWidth(), bmSrc.getHeight(), bmSrc.getConfig()); //建立畫板 mCanvas = new Canvas(bmCopy); //建立畫筆 final Paint paint = new Paint(); //在紙上畫畫,白紙在畫板上 mCanvas.drawBitmap(bmSrc,new Matrix(),paint); /*手勢識別器和畫筆的結合使用*/ iv.setOnTouchListener(new View.OnTouchListener(){ @Override public boolean onTouch(View v, MotionEvent event) { switch (event.getAction()){ case MotionEvent.ACTION_DOWN://按下時執行的邏輯 startX = (int)event.getX(); startY = (int)event.getY(); Log.d("mxy","startX:"+startX+"startY:"+startY); break; case MotionEvent.ACTION_MOVE://移動時執行的邏輯 newX =(int)event.getX(); newY =(int)event.getY(); Log.d("mxy","newX:"+newX+"newY:"+newY); //在背景圖中畫線 mCanvas.drawLine(startX,startY,newX,newY,paint); startX = newX; startY = newY; iv.setImageBitmap(bmCopy); break; case MotionEvent.ACTION_UP://擡起時執行的邏輯 break; } //諮詢實戰裡面的事件分發機制 return true; } }); } }