创建一个画板:
Activity main.xml
<?xml version="1.0" encoding="utf-8"?>
<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="com.example.administrator.draw.MainActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/drawable"
android:background="#555354"
android:src="@drawable/bg"/>
</RelativeLayout>
MainActivity.java
package com.example.administrator.draw;
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.view.MotionEvent;
import android.view.View;
import android.widget.ImageView;
public class MainActivity extends AppCompatActivity {
private ImageView imageView;
private int StartX;
private int StartY;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//加载画板背景图
Bitmap bt = BitmapFactory.decodeResource(getResources(),R.drawable.bg);
//创建背景图副本
final Bitmap bmcopy = Bitmap.createBitmap(bt.getWidth(),bt.getHeight(),bt.getConfig());
final Paint paint = new Paint();
final Canvas canvas = new Canvas(bmcopy);
canvas.drawBitmap(bt,new Matrix(),paint);
imageView = (ImageView) findViewById(R.id.drawable);
//imageView.setImageBitmap(bmcopy);
//设置触摸侦听
imageView.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;
//此时线画好但是画好后的图没有显示到imageView上,需要重新加载
imageView.setImageBitmap(bmcopy);
break;
case MotionEvent.ACTION_UP:
break;
}
return true;
}
});
}
}