最近项目中有个新的需求,用户在完交易需要进行输入支付密码付款的时候,要让用户签下自己的签名,提起到数字签名这个东西,感觉有点高大上,后来想想数字签名的原理也不是太复杂,主要实现原理就是利用了View的绘图原理,把用户在屏幕上的手指移动轨迹显示在屏幕上,接着把在屏幕上显示的轨迹View转换成一张图片,最后把图片保存到本地或者上传到服务器...
还是老规矩,首先看一下工程目录吧:
public class DrawView extends View {
/**
* 签名画笔
*/
private Paint paint;
/**
* 签名画布
*/
private Canvas cacheCanvas;
/**
* 画笔路径
*/
private Path path;
/**
* 缓存图片
*/
private Bitmap cacheBitmap;
/**
* 图片宽度
*/
private int width;
/**
* 图片高度
*/
private int height;
/**
* 手指触摸屏幕时的X,Y坐标
*/
private float xDown, yDown;
/**
* 是否正在绘制
*/
private boolean isDrawing = false;
/**
* 默认画笔颜色
*/
private int paintColor = Color.CYAN;
/**
* 默认画板背景色
*/
private int canvasColor = Color.parseColor("#bbccaa");
public DrawView(Context context, int width, int height) {
super(context);
this.width = width;
this.height = height;
initWedgits();
}
/**
* 初始化组件
*/
private void initWedgits() {
try {
paint = new Paint(Paint.DITHER_FLAG);
// 设置抗锯齿
paint.setAntiAlias(true);
// 设置画笔宽度
paint.setStrokeWidth(3);
paint.setDither(true);
// 设置样式
paint.setStyle(Paint.Style.STROKE);
paint.setStrokeJoin(Paint.Join.ROUND);
paint.setStrokeCap(Paint.Cap.ROUND);
// 画笔颜色
paint.setColor(paintColor);
// 绘制路径
path = new Path();
// 创建空缓存图片
cacheBitmap =