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

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

效果图例如以下

ps:没书法基础,字拙勿喷

最新文章

  1. 【python】安装指定模块
  2. java之多线程之一/序列化和反序列化
  3. 使用IntelliJ IDEA 14和Maven创建java web项目
  4. ASP.NET MVC4中调用WEB API的四个方法
  5. VSTO学习笔记(九)浅谈Excel内容比较
  6. ios save image to album
  7. 环信 之 iOS 客户端集成四:集成UI
  8. Intent及IntentFilter具体解释
  9. 二维码开源库ZBar-windows下编译和使用
  10. QGIS编译
  11. Django(二)路由系统、视图、模板
  12. 开发app前需要提前准备的资料
  13. common lisp的几个基本概念
  14. [Hbase]Hbase知识大全
  15. 常见bootloader介绍
  16. UVa 10048 噪音恐惧症(Floyd)
  17. 067——VUE中vue-router之使用transition设置酷炫的路由组件过渡动画效果
  18. STL中的Vector相关用法
  19. tzhpxc
  20. php发送post请求的三种方法

热门文章

  1. Flex this
  2. sql server 性能调优 资源等待之内存瓶颈的三种等待类型
  3. Nand flash uboot 命令详解
  4. 脑科学对基金经理的八个启示 z
  5. hdu4001
  6. 【温故知新】—— React/Redux/React-router4基础知识&amp;独立团Demo
  7. 【Javascript 基础】比较 undefined 和 null 值
  8. 【DB2】db2命令Export与Import
  9. 一分钟搞定触手app主页酷炫滑动切换效果
  10. 读EXCEL