最近的有一个功能需求,需要在平板上实现手写签名并保存上传到服务器,背景是网格状,可以擦除重签,需要保存的签名图片不能带有网格,所以需要自定义view分层。具体的实现效果如图,代码地址为https://github.com/Ahuanghaifeng/WriteSign
代码采用framelayout包裹两个自定义view实现,网格是一个,签名的白板也是一个。签名的view在上,背景透明,网格的view在下,背景是白色。
难点是擦除重签的功能,网上的做法一般都是直接画一层白板直接覆盖掉,但是本项目背景是透明的,画一层白色背景覆盖掉原来的签名,会导致后面的网格也被覆盖掉。所以不能采用,做法 如下
setXfermode()清除掉paint,并从新new一个出来。具体代码请看github。public void clear() { if (cacheCanvas != null) { paint.setXfermode(new PorterDuffXfermode(Mode.CLEAR)); cacheCanvas.drawPaint(paint); paint = new Paint(); paint.setAntiAlias(true); paint.setStrokeWidth(3); paint.setStyle(Paint.Style.STROKE); paint.setColor(Color.RED); invalidate(); } }