Implementation of Handwritten Signature by android
- 2021-11-13 18:26:26
- OfStack
In this paper, we share the specific code of android handwritten signature display for your reference. The specific contents are as follows
If the code is simple, you will not send demo, and paste the code directly
package com.xx;
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.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.MotionEvent;
import android.view.View;
import android.widget.Button;
import android.widget.FrameLayout;
import android.widget.ImageView;
import com.xx.R;
/**
* Description: Signature class
* Copyright: Copyright (c)2018
* Company:
* author: Corwin
* version: 1.0
* date: 2018/9/5 18:32
* Modification History:
* Date Author Version Description
* ------------------------------------------------------------------
* 2018/9/5 Corwin 1.0 1.0 Version
*/
public class SignatureActivity extends AppCompatActivity {
private ImageView imageSign;
private SignatureView mView;
@Override public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_signature);
imageSign = findViewById(R.id.iv_sign);
FrameLayout frameLayout = findViewById(R.id.fl_view);
mView = new SignatureView(this);
frameLayout.addView(mView);
mView.requestFocus();
Button btnClear = findViewById(R.id.btn_clear);
btnClear.setOnClickListener((v) -> {
mView.clear();
});
Button btnOk = findViewById(R.id.btn_ok);
btnOk.setOnClickListener((v) -> {
Bitmap imageBitmap = mView.getCachebBitmap();
imageSign.setImageBitmap(imageBitmap);
});
}
/**
* Custom Signature Control
*/
class SignatureView extends View {
// Paintbrush
private Paint paint;
// Canvas
private Canvas cacheCanvas;
// Bitmap
private Bitmap cachebBitmap;
// Picture save path
private Path path;
// Bitmap cache
public Bitmap getCachebBitmap() {
return cachebBitmap;
}
public SignatureView(Context context) {
super(context);
init();
}
/**
* Initialization
*/
private void init() {
// Set brush
paint = new Paint();
paint.setAntiAlias(true);
paint.setStrokeWidth(3);
paint.setStyle(Paint.Style.STROKE);
paint.setColor(Color.BLACK);
path = new Path();
// Create a bitmap
cachebBitmap = Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888);
// Build canvas with custom bitmap
cacheCanvas = new Canvas(cachebBitmap);
// Set the canvas to white
cacheCanvas.drawColor(Color.WHITE);
}
/**
* Clear the drawing board and reset the brush
*/
public void clear() {
if (cacheCanvas != null) {
paint.setColor(Color.WHITE);
cacheCanvas.drawPaint(paint);
paint.setColor(Color.BLACK);
cacheCanvas.drawColor(Color.WHITE);
invalidate();
}
}
@Override protected void onDraw(Canvas canvas) {
canvas.drawBitmap(cachebBitmap, 0, 0, null);
canvas.drawPath(path, paint);
}
@Override protected void onSizeChanged(int w, int h, int oldw, int oldh) {
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;
}
private float cur_x, cur_y;
@Override public boolean onTouchEvent(MotionEvent event) {
float x = event.getX();
float y = event.getY();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN: {
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;
}
}
}
Layout file:
<?xml version="1.0"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
<ImageView
android:id="@+id/iv_sign"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_gravity="center"
android:layout_marginBottom="3dp"
android:layout_weight="1"
android:background="@color/white"
/>
<FrameLayout
android:id="@+id/fl_view"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:background="@color/white"
/>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@android:drawable/bottom_bar"
android:paddingTop="3dp"
>
<Button
android:id="@+id/btn_ok"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=" Determine "
/>
<Button
android:id="@+id/btn_clear"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text=" Clear "
/>
</LinearLayout>
</LinearLayout>