安卓模仿签名

创建画笔:

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();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值