600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > android 电子签名设备 [Android]实现电子签名并截屏

android 电子签名设备 [Android]实现电子签名并截屏

时间:2019-02-22 09:33:43

相关推荐

android 电子签名设备 [Android]实现电子签名并截屏

随着无纸化的推进,在Android手机或其它设备往往需要用户进行手动签名,进行授权等操作。例如有银行用嵌入定制设备代替以后纸质的业务办理,以及在APP上作为替代用户对“同意《...协议》”的单选框打勾(√)的操作等。其后续操作往往是将签名图片与协议信息进行合成,保存,作为凭证。

个人认为目前其优点是,逼格高了一点,签名具有一定的独特性;缺点主要是当用手指在手机上签名时,由于屏幕尺寸和写字的方式等原因,写出字,往往自己都不敢恭维,不知道这样的签字是否具有法律效应。

抛开其优缺点,在技术上,实现签名并截屏需要用的知识点还是挺多的,帮助技能的提升和完善,可也用到其它很多地方,比如涂鸦,交互,分享等。

电子签名源自github一款流畅的电子签名——android-signaturepad。感谢作者的无私奉献,android-signaturepad功能十分强大,可以选择签名字体颜色,背景色,可生成PNG和SVG等格式图片。

由于项目的需要,去掉了SVG部分,设置签名粗细一致,生成透明PNG格式,方便签名在协议信息界面的显示。(当然也可将签名背景色设置与协议信息界面一致,当初怎么就没想到呢,还在透明设置上纠结了好久,脑子不够用呀)。其中相关的代码位置如下:

//笔触最细

private final int DEFAULT_ATTR_PEN_MIN_WIDTH_PX = 3;

//笔触最粗,因需粗细一致故设置与最细等值

//private final int DEFAULT_ATTR_PEN_MAX_WIDTH_PX = 7;

private final int DEFAULT_ATTR_PEN_MAX_WIDTH_PX = 3;

//笔触颜色

private final int DEFAULT_ATTR_PEN_COLOR = Color.BLACK;

以上是针对SignaturePad这个自定义控件的设置,在Activity中调用时作者也有写好的方法供直接使用,无需自己对Bitmap进行操作。具体如下:

//生成透明图片,则调用此方法,得到Bitmap

public Bitmap getTransparentSignatureBitmap(boolean trimBlankSpace);

//否则调用,缺省白色背景

public Bitmap getSignatureBitmap() ;

//下面这个方法中直接传入Bitmap,生成图片文件,并更新图库;

//若不更新图库,虽然图片能成功生成但在图库中看不到,只有等手机重启后才会显示(我的大神F1,4.4.2,不知道高版本的系统是否也这样)。

//图片保存成功返回true,否则返回false。成功时取文件的路径,传回协议信息进行展示

private boolean addTransPngSignatureToGallery(Bitmap signature);

//发送广播,使媒体库进行扫描更新的方法

private void scanMediaFile(File photo);

以上是实现签名的过程,在回传图片路径后,信息展示界面即可将其展示在协议之下,等待用户点击确定。点击确定,APP则进行截屏,将包换协议信息和签名的布局截屏为另一图片,上传至服务器或者分享等等。其中,截屏是针对ScrollView,因为有时协议信息太长导致信息和签名未显示在可视区域。方法如下:

private void PrintScreen() {

int height = 0;

for (int i = 0; i < scrollView.getChildCount(); i++) {

height += scrollView.getChildAt(i).getHeight();

scrollView.getChildAt(i).setBackgroundResource(android.R.color.white);

}

Bitmap bitmap = Bitmap.createBitmap(scrollView.getWidth(), height, Bitmap.Config.RGB_565);

File photo = new File(getAlbumStorageDir("Info"), String.format("Sign_%d.png", System.currentTimeMillis()));

signature_path = photo.getAbsolutePath();

Canvas canvas = new Canvas(bitmap);

scrollView.draw(canvas);

OutputStream stream;

try {

stream = new FileOutputStream(photo);

press(pressFormat.JPEG, 20, stream);

stream.close();

} catch (IOException e) {

e.printStackTrace();

}

}

签名并截图的过程大概就是这样。主要还是SignaturePad这个项目十分给力,源码也十分规范,值得一读。先简单记录一下,待补充效果图。也欢迎大家一起交流探讨。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。