创建画笔:
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.RED);
path = new Path();
cachebBitmap = Bitmap.createBitmap(
MeasureSpec.getSize(widthMeasureSpec),
MeasureSpec.getSize(heightMeasureSpec), Bitmap.Config.ARGB_8888);
cacheCanvas = new Canvas(cachebBitmap);
cacheCanvas.drawColor(Color.TRANSPARENT);
在 onTouchEvent 处理:
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
if(isListener!=null){
isListener.sign();
}
cur_x = x;
cur_y = y;
path.moveTo(cur_x, cur_y);
break;
}
case MotionEvent.ACTION_MOVE: {
path.quadTo(cur_x, cur_y, x, y);
cur_x = x;
cur_y = y;
break;
}
case MotionEvent.ACTION_UP: {
cacheCanvas.drawPath(path, paint);
path.reset();
break;
}
}
invalidate();
return true;
在 onSizeChanged 实时更新变化:
int curW = cachebBitmap != null ? cachebBitmap.getWidth() : 0;
int curH = cachebBitmap != null ? cachebBitmap.getHeight() : 0;
if (curW >= w && curH >= h) {
return;
}
if (curW < w)
curW = w;
if (curH < h)
curH = h;
Bitmap newBitmap = Bitmap.createBitmap(curW, curH,
Bitmap.Config.ARGB_8888);
Canvas newCanvas = new Canvas();
newCanvas.setBitmap(newBitmap);
if (cachebBitmap != null) {
newCanvas.drawBitmap(cachebBitmap, 0, 0, null);
}
cachebBitmap = newBitmap;
cacheCanvas = newCanvas;
最后画出轨迹:
canvas.drawBitmap(cachebBitmap, 0, 0, null);
canvas.drawPath(path, paint);
画出轨迹后,通过
mView.setDrawingCacheEnabled(true);
saveSign(mView.getDrawingCache());
mView.setDrawingCacheEnabled(false);
将签名截图保存到本地、
mView.setDrawingCacheEnabled(true); saveSign(mView.getDrawingCache()); mView.setDrawingCacheEnabled(false);
画出的字迹可以清除:
if (cacheCanvas != null) { paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.CLEAR)); cacheCanvas.drawPaint(paint); paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(3); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); invalidate(); }