如何在android studio中录入手动签名的编码

如何在android studio中录入手动签名的编码?

使用edittext这个控件,如何实现点击后实现手动签名。如下图:

img

在 Android Studio 中实现手动签名可以通过使用 Canvas 绘制手写图形,并保存为图片,最终将其转化为签名字符串保存到数据库中。

下面是一个简单的实现过程:

  1. 在布局文件中,添加一个 View 控件用于绘制签名:
<RelativeLayout
    android:id="@+id/signature_view"
    android:layout_width="match_parent"
    android:layout_height="0dp"
    android:layout_weight="1">

    <View
        android:id="@+id/signature_canvas"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:background="@color/white"
        android:padding="10dp" />
</RelativeLayout>
  1. 在代码中,给 Canvas 设置颜色,线宽等参数,并添加监听器,获取手写签名的图形:
public class MainActivity extends AppCompatActivity {

    private Canvas canvas;
    private Paint paint;
    private Bitmap bitmap;
    private View canvasView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        // 获取签名绘制的 View
        canvasView = findViewById(R.id.signature_canvas);
        canvasView.setOnTouchListener(new View.OnTouchListener() {
            @Override
            public boolean onTouch(View v, MotionEvent event) {
                switch (event.getActionMasked()) {
                    case MotionEvent.ACTION_DOWN:
                        drawStart(event.getX(), event.getY());
                        break;
                    case MotionEvent.ACTION_MOVE:
                        drawMove(event.getX(), event.getY());
                        break;
                    case MotionEvent.ACTION_UP:
                        drawEnd();
                        break;
                }
                return true;
            }
        });
    }

    // 开始画线
    private void drawStart(float x, float y) {
        bitmap = Bitmap.createBitmap(canvasView.getWidth(), canvasView.getHeight(),
                Bitmap.Config.ARGB_8888);
        canvas = new Canvas(bitmap);
        canvas.drawColor(Color.WHITE);
        paint = new Paint();
        paint.setColor(Color.BLACK);
        paint.setStrokeWidth(5f);
        paint.setStyle(Paint.Style.STROKE);
        paint.setAntiAlias(true);
        canvas.drawPoint(x, y, paint);
    }

    // 继续画线
    private void drawMove(float x, float y) {
        canvas.drawPoint(x, y, paint);
        canvasView.invalidate();
    }

    // 结束画线
    private void drawEnd() {
        canvas.save();
        canvas.restore();
        canvasView.invalidate();
        String signature = bitmapToString(bitmap);
        // 保存签名字符串到数据库中
    }

    // 将 Bitmap 转为字符串
    private String bitmapToString(Bitmap bitmap) {
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        bitmap.compress(Bitmap.CompressFormat.PNG,100,baos);
        byte[] bytes = baos.toByteArray();
        return Base64.encodeToString(bytes, Base64.DEFAULT);
    }
}
  1. 可以将签名保存在数据库中,也可以将签名保存在本地文件中。

这样可以实现手写签名的功能,但建议还是使用数字签名,以确保签名的真实性和安全性。

在布局文件中添加一个EditText和一个自定义View:

<EditText
    android:id="@+id/editText"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:hint="请输入签名" />

<com.example.signatureview.SignatureView
    android:id="@+id/signatureView"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:background="@android:color/white" />

创建一个自定义View,继承自View类,用于绘制签名:

public class SignatureView extends View {

    private Paint mPaint;
    private Path mPath;

    public SignatureView(Context context, AttributeSet attrs) {
        super(context, attrs);
        mPaint = new Paint();
        mPaint.setColor(Color.BLACK);
        mPaint.setStrokeWidth(5);
        mPaint.setStyle(Paint.Style.STROKE);
        mPaint.setStrokeJoin(Paint.Join.ROUND);
        mPaint.setStrokeCap(Paint.Cap.ROUND);
        mPath = new Path();
    }

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

    @Override
    public boolean onTouchEvent(MotionEvent event) {
        float x = event.getX();
        float y = event.getY();
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                mPath.moveTo(x, y);
                return true;
            case MotionEvent.ACTION_MOVE:
                mPath.lineTo(x, y);
                break;
            case MotionEvent.ACTION_UP:
                break;
            default:
                return false;
        }
        invalidate();
        return true;
    }

    public void clear() {
        mPath.reset();
        invalidate();
    }

    public Bitmap getBitmap() {
        Bitmap bitmap = Bitmap.createBitmap(getWidth(), getHeight(), Bitmap.Config.ARGB_8888);
        Canvas canvas = new Canvas(bitmap);
        draw(canvas);
        return bitmap;
    }
}

在Activity中获取EditText和SignatureView控件,并设置点击事件:

public class MainActivity extends AppCompatActivity {

    private EditText mEditText;
    private SignatureView mSignatureView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mEditText = findViewById(R.id.editText);
        mSignatureView = findViewById(R.id.signatureView);

        mEditText.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mSignatureView.clear();
            }
        });
    }
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!
PS:问答VIP年卡 【限时加赠:IT技术图书免费领】,了解详情>>> https://vip.csdn.net/askvip?utm_source=1146287632