1. 程式人生 > 程式設計 >android實現手寫簽名功能

android實現手寫簽名功能

本文例項為大家分享了android手寫簽名展示的具體程式碼,供大家參考,具體內容如下

程式碼簡單,就不發demo了,直接貼程式碼

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: 簽名類
 * 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);
  });
 }
 
 /**
  * 自定義簽名控制元件
  */
 class SignatureView extends View {
 
  //畫筆
  private Paint paint;
 
  //畫布
  private Canvas cacheCanvas;
 
  //點陣圖
  private Bitmap cachebBitmap;
 
  //圖片儲存路徑
  private Path path;
 
  //點陣圖快取
  public Bitmap getCachebBitmap() {
   return cachebBitmap;
  }
 
  public SignatureView(Context context) {
   super(context);
   init();
  }
 
  /**
   * 初始化
   */
  private void init() {
   //設定畫筆
   paint = new Paint();
   paint.setAntiAlias(true);
   paint.setStrokeWidth(3);
   paint.setStyle(Paint.Style.STROKE);
   paint.setColor(Color.BLACK);
   path = new Path();
 
   //建立點陣圖
   cachebBitmap = Bitmap.createBitmap(10,10,Bitmap.Config.ARGB_8888);
 
   //用自定義點陣圖構建畫布
   cacheCanvas = new Canvas(cachebBitmap);
   //設定畫布為白色
   cacheCanvas.drawColor(Color.WHITE);
  }
 
  /**
   * 清除畫板,重置畫筆
   */
  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,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,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;
  }
 }
}

佈局檔案:

<?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="確定"
    />
  <Button
    android:id="@+id/btn_clear"
    android:layout_width="0dp"
    android:layout_height="wrap_content"
    android:layout_weight="1"
    android:text="清除"
    />
 </LinearLayout>
</LinearLayout>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。