最近有一个项目设计一个APP实现通过触摸屏实现毛笔写字效果。传统的绘画板程序直接通过Path的moveTo和LineTo便可实现简单的线条绘画程序。然而要达到毛笔的笔锋效果则需要更为详细点的设计。我的实现思路是通过以触摸事件DOWN、MOVE、UP中的每一个点为圆心画圆,除此之外还可通过触摸压力的大小改变所绘圆的半径,这样一连串的圆便可粗略地模拟毛笔笔锋效果,在设计次效果时遇到两个问题:
1:android触摸中的MOVE时间取点的频率不是很高,会隔一定的像素取点,当轻触滑动时会出现一天不连续圆的情况,明显不符合笔锋效果。之后我的解决办法是在相邻的圆之间drrawLine,画笔的大小与圆的直径大小差不多,如此便将略显离散的圆连起来形成连续的笔锋效果。
2. 写字板类似的程序说白了就是在画布上绘制多条曲线。我的实现是在继承自View类的OnTouch事件中将屏幕中的点保存到List中(List<List<Object>>).每添加一个点都invalidate重绘画布(onDraw). 在onDraw函数绘制线条的时候遍历List,每一个点画圆,圆之间通过Line连接。 测试时发现当线条过多时程序会出现卡顿现象,自习回顾绘制这一过程会发现是onDraw中频繁绘制影响了程序的效率。 在此情况下通过通过图片缓存技术很好的解决了这个问题,具体实现思路如下:建立一个缓冲画布,和缓冲bitmap,onTouch事件中将圆及Line绘制到缓冲bitmap中。在onDraw函数中直接将缓冲bitmap绘制到canvas中(canvas.drawBitmap(bitmap.paint)).
当然如此设计出来的笔锋效果还很粗糙,后期还可通过每一笔画的起点,转折点及收尾点设计不同的形状来丰富毛笔笔锋的效果
原文地址:http://blog.csdn.net/coder_lz/article/details/38878551