Android实现手写签名

本文实例为大家分享了Android手写签名的实现方法,产品要求用户可以在app上签协议。。所以得弄个手写签名版,参考了一些资料自己写了个PaintView去继承View,实现签名功能。

package com.****.*****.widget;

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;

/**
 * This view implements the drawing canvas.
 * <p/>
 * It handles all of the input events and drawing functions.
 * 签名版
 */
public class PaintView extends View {
 private Paint paint;
 private Canvas cacheCanvas;
 private Bitmap cachebBitmap;
 private Path path;
 private OnMoveLisener lisener;

 public void setSize(int width,int height,OnMoveLisener lisener) {
  this.lisener=lisener;
  init(width,height);
 }

 public PaintView(Context context, AttributeSet attrs) {
  super(context, attrs);
  //init(0,0);
 }

 public Bitmap getCachebBitmap() {
  return cachebBitmap;
 }

 private void init(int width,int height) {
  paint = new Paint();
  paint.setAntiAlias(true);
  paint.setStrokeWidth(3);
  paint.setStyle(Paint.Style.STROKE);
  paint.setColor(Color.BLACK);
  path = new Path();
  cachebBitmap = Bitmap.createBitmap(width, height, 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.drawColor(BRUSH_COLOR);
  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) {

  getParent().requestDisallowInterceptTouchEvent(true);// 通知父控件勿拦截本控件touch事件

  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;
    lisener.hideWords();//隐藏提醒的文字
    break;
   }

   case MotionEvent.ACTION_UP: {
    cacheCanvas.drawPath(path, paint);
    path.reset();
    break;
   }
  }

  invalidate();

  return true;
 }

 public interface OnMoveLisener{
  void hideWords();//主界面回调后隐藏提示文字
 }
}

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • flex 手写在线签名实现代码第1/2页

    在线手写签名分两部份.第一部分是画图功能的实现,第二部份是上传图片的功能(上传到服务器或保存到本地). 画图:画图比较简单,只要用到了graphics对像的几个方法.当鼠标按下时,调用graphics的beginFill和moveTo方法.同时,还要把调用了lineTo的方法加入到鼠标的MOUSE_MOVE事件中.代码如下: Actionscript代码 复制代码 代码如下: package com.humanmonth.home.component.page.signature { impor

  • Android实现手写签名

    本文实例为大家分享了Android手写签名的实现方法,产品要求用户可以在app上签协议..所以得弄个手写签名版,参考了一些资料自己写了个PaintView去继承View,实现签名功能. package com.****.*****.widget; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.Color;

  • 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

  • Android实现屏幕手写签名

    Android屏幕手写签名的原理就是把手机屏幕当作画板,把用户手指当作画笔,手指在屏幕上在屏幕上划来划去,屏幕就会显示手指的移动轨迹,就像画笔在画板上写字一样.实现手写签名需要结合绘图的路径工具Path,在有按下动作时调用Path对象的moveTo方法,将路径起始点移动到触摸点:在有移动操作时调用Path对象的quadTo方法,将记录本次触摸点与上次触摸点之间的路径:在有移动操作与提起动作时调用Canvas对象的drawPath方法,将本次触摸绘制在画布上. layout/activity_si

  • Android 自定义View手写签名并保存图片功能

    GIF压缩有问题,运行很顺滑!!! 1.自定义View--支持设置画笔颜色,画笔宽度,画板颜色,清除画板,检查是否有签名,保存画板图片(复制粘贴可直接使用) /** * Created by YyyyQ on 2020/3/5. * 电子签名 */ public class SignatureView extends View { private Context context; //X轴起点 private float x; //Y轴起点 private float y; //画笔 priva

  • 如何将tensorflow训练好的模型移植到Android (MNIST手写数字识别)

    [尊重原创,转载请注明出处]https://blog.csdn.net/guyuealian/article/details/79672257 项目Github下载地址:https://github.com/PanJinquan/Mnist-tensorFlow-AndroidDemo 本博客将以最简单的方式,利用TensorFlow实现了MNIST手写数字识别,并将Python TensoFlow训练好的模型移植到Android手机上运行.网上也有很多移植教程,大部分是在Ubuntu(Linu

  • vue+canvas实现移动端手写签名

    本文实例为大家分享了vue+canvas实现移动端手写签名的具体代码,供大家参考,具体内容如下 <template> <div class="sign"> <div class="header"> <i class="el-icon-arrow-left backImg" @click="goBack"></i> <span class="title&

  • 基于canvas实现手写签名(vue)

    最近一直在研究canvas的东西,正好之前对手写签名这块有点兴趣.就自己基于vue写了一个简易的手写签名demo. 其中原理比较简单,先生成一个canvas画布,并对canvas进行touchstart和touchmove事件进行监听.当监听touchstart事件被触发时,我们开始触发canvas里的beginPath事件并且设置moveTo原始点.当监听touchmove事件则去不断去触发lineTo事件,最后stroke(). demo里还有清除签名和保存签名的功能,分别对应了clearR

  • vue使用canvas实现移动端手写签名

    基于vue使用canvas实现移动端手写签名! 之前自己开发有这么一个需求,需要实现手写签名,然后以图片的形式保存生成图片的base64数据流 .自己在网上找了一堆,都不是很完美.然后参考网上的加自己的优化和修改做了一版.希望有需要的朋友可以拿来直接用. HTML部分: <template> <div class="hello" > <div>请输入您的签名7:</div> <canvas id="canvas"

  • 微信小程序实现简单手写签名组件的方法实例

    目录 背景: 需求: 效果 一.思路 二.实现 1. 页面与样式 2. 初始化 3. 点击时 4. 签名时 三.总结 背景: 在做项目过程中,需要在微信小程序中实现手写签名组件.在网上找了微信小程序手写签名实现,但是都是不太理想.在实际运用中,会因为实时计算较多的贝塞尔曲线而产生卡顿.效果不理想.所以退一步,不需要笔锋以及笔迹模拟效果.只需要简单的手写签名实现. 需求: 可以实现用户在微信小程序上手写签名. 需要组件化. 效果 一.思路 在微信小程序中,我们使用canvas组件实现.将用户的输入

  • 使用vue实现手写签名功能

     个人实现截图: 安装: npm install vue-esign --save 使用: 1.在main.js中引入 import vueEsign from 'vue-esign' Vue.use(vueEsign) 2.在页面中引用 <vue-esign ref="esign" :width="800" :height="300" :isCrop="isCrop" :lineWidth="lineWidt

随机推荐