前段时间项目用到了电子签证。

刚开始听到产品的需求就是一个大写的懵逼。

后来详谈才知道是在手机上签名而已。

在网上查了下。

基本实现就是自定义view ,然后重写触摸事件。实现写字的功能。

然后实现view映射成图片。

基本实现很简单。需要注意的是 一定一定要在XML文件中把自定义控件的背景设置一个颜色。否则保存的图片是一个黑板。

下面贴一下自定义VIEW的代码。

public class SignatureView extends View {

private static final float STROKE_WIDTH = 5f;

/** Need to track this so the dirty region can accommodate the stroke. **/

private static final float HALF_STROKE_WIDTH = STROKE_WIDTH / 2;

private Paint paint = new Paint();

private Path path = new Path();

/**

* Optimizes painting by invalidating the smallest possible area.

*/

private float lastTouchX;

private float lastTouchY;

private final RectF dirtyRect = new RectF();

public SignatureView(Context context, AttributeSet attrs) {

super(context, attrs);

paint.setAntiAlias(true);

paint.setColor(Color.BLACK);

paint.setStyle(Paint.Style.STROKE);

paint.setStrokeJoin(Paint.Join.ROUND);

paint.setStrokeWidth(STROKE_WIDTH);

}

/**

* Erases the signature.

*/

public void clear() {

path.reset();

// Repaints the entire view.

invalidate();

}

@Override

protected void onDraw(Canvas canvas) {

canvas.drawPath(path, paint);

}

@Override

public boolean onTouchEvent(MotionEvent event) {

float eventX = event.getX();

float eventY = event.getY();

switch (event.getAction()) {

case MotionEvent.ACTION_DOWN:

path.moveTo(eventX, eventY);

lastTouchX = eventX;

lastTouchY = eventY;

// There is no end point yet, so don't waste cycles invalidating.

return true;

case MotionEvent.ACTION_MOVE:

case MotionEvent.ACTION_UP:

// Start tracking the dirty region.

resetDirtyRect(eventX, eventY);

// When the hardware tracks events faster than they are delivered, the

// event will contain a history of those skipped points.

int historySize = event.getHistorySize();

for (int i = 0; i < historySize; i++) {

float historicalX = event.getHistoricalX(i);

float historicalY = event.getHistoricalY(i);

expandDirtyRect(historicalX, historicalY);

path.lineTo(historicalX, historicalY);

}

// After replaying history, connect the line to the touch point.

path.lineTo(eventX, eventY);

break;

default:

// debug("Ignored touch event: " + event.toString());

return false;

}

// Include half the stroke width to avoid clipping.

invalidate(

(int) (dirtyRect.left - HALF_STROKE_WIDTH),

(int) (dirtyRect.top - HALF_STROKE_WIDTH),

(int) (dirtyRect.right + HALF_STROKE_WIDTH),

(int) (dirtyRect.bottom + HALF_STROKE_WIDTH));

lastTouchX = eventX;

lastTouchY = eventY;

return true;

}

/**

* Called when replaying history to ensure the dirty region includes all

* points.

*/

private void expandDirtyRect(float historicalX, float historicalY) {

if (historicalX < dirtyRect.left) {

dirtyRect.left = historicalX;

} else if (historicalX > dirtyRect.right) {

dirtyRect.right = historicalX;

}

if (historicalY < dirtyRect.top) {

dirtyRect.top = historicalY;

} else if (historicalY > dirtyRect.bottom) {

dirtyRect.bottom = historicalY;

}

}

/**

* Resets the dirty region when the motion event occurs.

*/

private void resetDirtyRect(float eventX, float eventY) {

// The lastTouchX and lastTouchY were set when the ACTION_DOWN

// motion event occurred.

dirtyRect.left = Math.min(lastTouchX, eventX);

dirtyRect.right = Math.max(lastTouchX, eventX);

dirtyRect.top = Math.min(lastTouchY, eventY);

dirtyRect.bottom = Math.max(lastTouchY, eventY);

}

}

下面贴上使用的代码

1.将view映射成图片

public Bitmap createViewBitmap(View v) {

Bitmap bitmap = Bitmap.createBitmap(v.getWidth(), v.getHeight(),

Bitmap.Config.ARGB_8888);

Canvas canvas = new Canvas(bitmap);

v.draw(canvas);

return bitmap;

}

2.然后保存,或者上传服务器就好。

OK 搞定!!

android 电子签名证书,android 电子签名实现相关推荐

  1. android crt证书,android https 抓包,root安装证书

    1,背景介绍: 由于车机无法安装证书,所以需要获取root权限,通过push的方式添加证书. 系统需安装openssl 2,证书转换: fidder 的证书是cer格式,需要转换成crt格式 open ...

  2. Android 画布使用之电子签名

    前言 原理 定义属性 接受输入信息 显示输入信息 定义画笔 设置画笔属性 代码设置 自定义组件属性 使用自定义属性 获取图像信息 保存图像到文件 清空输入 前言 促进小飞哥写代码的动力只有两个.第一个 ...

  3. android 数字证书具体应用机制

    Android手机操作系统作为一款比较流行的开源系统在手机领域占据着举足轻重的地位. 在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者 ...

  4. 我的Android进阶之旅------修改Android签名证书keystore的密码、别名alias以及别名密码...

    转载于:http://blog.k-res.net/archives/1229.html  和 http://blog.k-res.net/archives/1671.html ADT允许自定义调试用 ...

  5. Android签名证书

    在最新的Android SDK中我们看到了Android签名证书机制的出现,也就是说几乎和Symbian OS v9.x以上平台构架一样,都需要数字签名证书才可以运行,这也是考虑到平台的安全性,同样也 ...

  6. android系统证书导入工具,添加Fiddler/Mitmproxy证书为安卓系统证书

    Android证书分为"用户证书"和"系统证书"两种,在设置->安全->"查看安全证书"列表中,可以看到"系统&quo ...

  7. Android数字证书

    为Android/Ophone应用程序签名步骤: 1.确保电脑上安装了JDK,因为我们将使用JDK自带的创建和管理数字证书的工具Keytool.在命令行下输入如下命令: Java代码 keytool  ...

  8. Android签名证书的生成

    本节只针对如何从零开始实现简单的打包签名 目录 概要 Keytool生成JKS签名证书 Android Studio生成JKS签名证书 AS版本信息 签名证书的生成 签名打包 概要 debug.key ...

  9. 查看 android打包证书签名

    查看 android打包证书签名 用java keytool 查看证书签名 keytool -list -v -keystore 证书路径 输入证书密码之后会看到 MD5\SHA1\SHA256 签名 ...

  10. Android的证书验证过程

    说明:本文分析源码基于Android_8.1 (还在看代码和修改文章的阶段,有点乱,慢慢来-) 文章目录 0x01 系统证书 0x02 证书管理类 0x03 证书验证流程 3.1 建立安全的连接 3. ...

最新文章

  1. windows 切换 默认 jdk 版本
  2. 二叉树后续遍历非递归
  3. 蓝桥杯java第八届第六题--最大公共子串
  4. 以Delphi Package架构多人开发应用程序环境
  5. 【Qt】QModbusPdu类
  6. python encode gbk_[转]Python UnicodeEncodeError: 'gbk' codec can't encode character 解决方法
  7. Unity大密度建筑场景加载解决方案
  8. raspberry pi_如何进行Raspberry Pi聚会
  9. ajax异步数据加载
  10. 在python中month函数的用法_Python代码中calendar.monthrange(year,month)函数其什么作用呢?...
  11. Jmeter--【作为测试你必须要知道的】基础名词与环境搭建
  12. 上网被阻断未经pppoe认证_锐捷上网认证常见问题及解决办法
  13. 晶体三极管及其基本放大电路之共发射极电路
  14. exp和expdp的filesize参数的使用--导出多个文件
  15. leanote 蚂蚁云笔记 源码编译
  16. 2015年9月10日
  17. 【Matlab学习】
  18. xampp mysql远程连接_XAMPP mysql远程连接
  19. 兄弟连区块链入门教程分享区块链POW证明代码实现demo
  20. 【ZZULIOJ】1091: 童年生活二三事(多实例测试)

热门文章

  1. android页指示动画,Android动画之翻页
  2. 智能时代,谁是“大师”?
  3. 深入理解JavaScript运行机制
  4. 注意力机制最新综述解读
  5. 软工作业--团队作业2
  6. asus pc server + geforce titan xp + centos 7
  7. 阿里P9纯手打亿级高并发系统设计手册,走进阿里的架构世界
  8. 热爱生命 - 汪国真
  9. 综合实验-基于RS485的多机评分系统
  10. 2017年的Microsoft Imagine Cup提供的免费Azure申请及使用方法