前言
促进小飞哥写代码的动力只有两个。第一个是为了挣钱钱,第二个是为了挣更多的钱。所以毫无疑问,电子签名又是公司最近需要开发的新功能。
应用场景:以前去银行办理业务都得去柜台,填N张表格,写N多个签名。随着智能机的普及、移动终端app的使用场景越来越广泛。手机银行app也给越来越多的人办理银行业务提供便捷,妈妈再也不用但是我们去银行排队浪费时间了。然而,有的业务该走的流程必须得走,所以电子签名的需求也就凸显出来。
这是一篇技术博客,那废话就不多说了。
原理
在Android开发中,所有用户可见的页面都是由一个个View(视图)拼接而成。Google 已经提供了很多的基础的View组件,如:显示图片的ImageView,显示文字的TextView,这些已经被造好的轮子能够让我们很方便的去开发绝大多数app。除此之外,有些轮子还得自己造,不然要程序员干嘛呢?虽然网上已经有很多已经实现过电子签名,但是小飞哥一直以来都崇尚自己动手,哪怕是Hello Word 也绝不copy。(又扯远了!!!)
说了那么多,实现电子签名的组件(在程序中命名SignView)需要继承View,这也是面向对象编程的一大特色,直接继承View,为我们省去不少麻烦。记录用户在触屏上滑动的轨迹、重写onDraw方法将轨迹在屏幕上绘制出来,就实现了我们需要的效果了。然而一切并没有结束,还需要保存为图片,先上图:
定义属性
private Paint linePaint;// 画笔
private ArrayList<Path> lines;// 写字的笔迹,支持多笔画
private int lineCount;// 记录笔画数目
private final int DEFAULT_LINE_WIDTH = 10;// 默认笔画宽度
private int lineColor = Color.BLACK;// 默认字迹颜色(黑色)
private float lineWidth = DEFAULT_LINE_WIDTH;// 笔画宽度
- 画笔:在屏幕上绘制出我们写下的笔迹,画笔主要有两个属性,颜色和粗细。这也是在程序中只开放设置接口的两个属性。
- 笔迹集合:不否认有人写字时喜欢一气呵成,但是支持多笔输入,可以让程序支持更多输入场景。
- 默认值:默认字迹颜色黑色,字迹宽度10 个像素点(这是一个很细的线,随便写的,不要介意)
接受输入信息
/**
* @file Framework:com.flueky.android.view.SignView.java
* @author flueky zuokefei0217@163.com
* @time 2016年12月19日 上午10:49:58
* @see android.view.View#onTouchEvent(android.view.MotionEvent)
*/
@Override
public boolean onTouchEvent(MotionEvent event) {
/**
* 考虑到这个view会出现在lib工程里,因此使用if else
*/
if (event.getAction() == MotionEvent.ACTION_DOWN) {
// 按下这个屏幕
Path path = new Path();
path.moveTo(event.getX(), event.getY());
lines.add(path);
lineCount = lines.size();
} else if (event.getAction() == MotionEvent.ACTION_MOVE) {
// 在屏幕上移动