最近学习了如何使用View与SurfaceView制作简单的手绘板,在此做个小结。
自定义VIew实现手绘板:
首先是使用View来实现手绘板:
package com.app.superxlcr.mydrawboard.myView;
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.graphics.PorterDuff;
import android.graphics.PorterDuffXfermode;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by Superxlcr
* On 2016/3/18
* 普通画板View
*/
public class NormalDrawBoardView extends View {
// 点击的坐标
private float lastX = 0, lastY = 0;
private Path path;
private Paint paint;
// 使用内存中的图片作为缓冲区
private Bitmap cacheBitmap;
// 缓冲区上的Canvas对象
private Canvas cacheCanvas;
public NormalDrawBoardView(Context context, int width, int height) {
super(context);
// 创建确定大小的bitmap
cacheBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
// 初始化缓存画布,把bitmap内容画到缓存画布上
cacheCanvas = new Canvas();
cacheCanvas.setBitmap(cacheBitmap);
path = new Path();
// 初始化画笔
// 防抖动
paint = new Paint(Paint.DITHER_FLAG);
paint.setColor(Color.BLACK);
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeWidth(1);
// 反锯齿
paint.setAntiAlias(true);
paint.setDither(true);
}
/**
* 设置画笔的颜色
* @param color,颜色的字符串
*/
public void setPaintColor(String color) {
switch (color) {
case "red" :
paint.setColor(Color.RED);
break;
case "green" :
paint.setColor(Color.GREEN);
break;
case "blue" :
paint.setColor(Color.BLUE);
break;
case "yellow" :
paint.setColor(Color.YELLOW);
break;
default:
paint.setColor(Color.BLACK);
break;
}
}
/**
* 设置画笔粗细
* @param width
*/
public void setPaintWidth(int width) {
paint.setStrokeWidth(width);
}
public void clearCanvas() {
// 清除path轨迹
path.reset();
path.moveTo(lastX, lastY);
// 清除cacheCanvas图像
Paint paint