要实现一个画图板,当用户在触摸屏上移动时,即可在屏幕上绘制出任意的图形,借助Android提供的Path类,可以方便的实现这种效果。
需要指出的是,如果程序每次都是从上次拖动事件的发生点绘制一条直线到本次拖动的事件发生点,那么用户前面的绘制就会丢失,为了保留用户之前的绘制的内容,程序要借助“双缓冲”技术。
双缓冲技术的原理很简单:当程序需要在制定的View上进行绘制时,程序并不直接绘制在该View上,而是先绘制到内存中的Bitmap图片(这就是缓冲),等到内存中的Bitmap绘制好之后,再一次性的将Bitmap绘制到View组件上。
首先自定义一个View,该View对onTouchEvent回调方法重写,自身处理绘制事件
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Canvas;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.Path;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by zjr on 2018/3/9.
*/
public class DrawView extends View {
float preX;
float preY;
private Path path;
public Paint paint;
final int VIEW_WIDTH = 400;
final int VIEW_HEIGHT = 500;
Bitmap cacheBitmap = null;
Canvas cacheCanvas = null;
public DrawView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
cacheBitmap = Bitmap.createBitmap(VIEW_WIDTH,VIEW_HEIGHT, Bitm