码迷,mamicode.com
首页 > 移动开发 > 详细

android中实现毛笔效果(View 中绘图)

时间:2014-08-27 23:31:08      阅读:415      评论:0      收藏:0      [点我收藏+]

标签:android   算法   触摸屏   canvas   缓存   

最近有一个项目设计一个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)).


当然如此设计出来的笔锋效果还很粗糙,后期还可通过每一笔画的起点,转折点及收尾点设计不同的形状来丰富毛笔笔锋的效果

android中实现毛笔效果(View 中绘图)

标签:android   算法   触摸屏   canvas   缓存   

原文地址:http://blog.csdn.net/coder_lz/article/details/38878551

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!