1. 程式人生 > >畫紙上畫線

畫紙上畫線

 佈局檔案  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;
            }
        });
    }
}