简单易懂 签字板

今天项目有需求弄一个签字板,看了网上很多大神做了很多优化操作(就搜到了几个类关联操作的,想着就简便实现),所以就自己写了一个简简单单自定义类 ,再次记录一下

更新签字版 黑屏问题, 在绘制创建图片时,把图片设置为白色背景(默认的是透明的)
更改代码位置
   //在view里面创建所有Bitmap时
   mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
            mCanvas=new Canvas(mBitmap);
            Paint paint = new Paint();
            paint.setColor(Color.WHITE);
            mCanvas.drawRect(0, 0, mBitmap.getWidth(), mBitmap.getHeight(), paint);
            mCanvas.drawBitmap(mBitmap, 0, 0, paint);

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.util.AttributeSet;
import android.view.MotionEvent;
import android.view.View;

import java.util.ArrayList;
import java.util.List;

public class SignPlateView extends View {

private Paint mPaint;
private Path mPath;
private Bitmap mBitmap=null;
private Canvas mCanvas;

private List<Path> mPathList=new ArrayList<>();

private float downX;
private float downY;
private int width;
private int height;

public SignPlateView(Context context) {
    this(context,null);
}

public SignPlateView(Context context, AttributeSet attrs) {
    this(context,attrs,0);
}

public SignPlateView(Context context, AttributeSet attrs, int defStyleAttr) {
    super(context, attrs, defStyleAttr);
    init();
}

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    for (Path mPath:mPathList){
        canvas.drawPath(mPath,mPaint);
    }

}


public Bitmap getBitmap() {
    if (mCanvas!=null){
        for (Path mPath:mPathList){
            mCanvas.drawPath(mPath,mPaint);
        }
    }
    return mBitmap;
}



@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);
    width=w;
    height=h;
    mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
    mCanvas=new Canvas(mBitmap);
}

private void init(){
    mPaint=new Paint();
    mPaint.setColor(Color.parseColor("#000000"));
    mPaint.setStyle(Paint.Style.STROKE);
    mPaint.setStrokeWidth(5);
    mPaint.setAntiAlias(true);

}

@Override
public boolean onTouchEvent(MotionEvent event) {
    switch (event.getAction()){
        case MotionEvent.ACTION_DOWN:
            downX=event.getX();
            downY=event.getY();
            mPath=new Path();
            mPath.moveTo(event.getX(),event.getY());
            mPathList.add(mPath);
        break;

        case MotionEvent.ACTION_MOVE:
            mPath.quadTo(downX,downY,(downX+event.getX())/2,(downY+event.getY())/2);
            downX=event.getX();
            downY=event.getY();
        break;

    }
    invalidate();
    return true;
}


public boolean checkIsWrite(){

    if (mBitmap==null){
        return false;
    }

    return true;
}

//撤销
public void revoke(){
if (mPathList.size()>0){
mPathList.remove(mPathList.size()-1);
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
mCanvas=new Canvas(mBitmap);
invalidate();
}
}

//清除
public void clear(){
mPathList.clear();
mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
mCanvas=new Canvas(mBitmap);
invalidate();
}

public void onDestroy() {
    mBitmap.recycle();
}

}


亲测可用  !!!
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值