Android 原笔迹手写控件,压感,笔锋不可少!

手写控件相关文章:http://kevinems.com/tag/%E6%89%8B%E5%86%99

本人在好记星平板电脑 N818S 上开发的原笔迹手写控件,压感,笔锋都实现了,笔迹保存,还原,删除,放大,缩小,旋转,移动功能也实现了,控件的API简单易用,可以说是一个比较完善的控件了,并集成到 Framework,小有成就感啊。

当初需求统计,分析是就认定是一个相对复杂的控件,所以前期做了不少工作,后期编码实现的时候相对还算比较顺利。

这是第一次真正意义上遵循了标准的软件开发流程,开发效率果然提高不少。科学的开发方法,事半功倍。

流程大概:

  1. 需求统计
  2. 需求分析
  3. 概要设计
  4. 详细设计
  5. 编码
  6. 测试
  7. 软件交付
  8. 软件维护

平台:好记星 N818S,Android 4.2,汉王电磁屏,电磁笔

笔触效果:钢笔,铅笔,马克笔,毛笔

效果图:

一个终端培训师的作品~~~

PaintView

welcome

本人涂鸦作品:

钢笔效果视频演示:

铅笔效果视频演示:

android

在纸质笔记本上书写的时候,会随着书写速度的快慢,钢笔笔迹会相应变细或者变粗,这样的笔迹更加动感,优美。

通过算法实现普通电容屏上的压感笔锋效果:

《Android 原笔迹手写控件,压感,笔锋不可少!》上有67条评论

  1. 我想请教一个问题,我现在在做一个app,里面有手写功能的那种,问题是这个适配如何做?意思就是如果区分哪个厂商的平板用哪个这种原笔迹的控件?

    1. 一般只要区别你接收到的点是否有压力值。如果你设置笔触大小为10,没有压力值的话,那笔触大小就是10*1。
      而有压力值的话,笔触大小就是 10*压力值。
      压力值的大小是0~1的浮点数。

      所以不用适配,直接在程序里面用压力值*笔触大小。

          1. 我尽量说明白。
            1.一条曲线,实际上是通过多条直线连成的。
            2.笔触粗细平滑,取决于这些直线有多少条。而这些直线的粗线反映你的笔触的压力的大小。
            3.想象一下,当直线近似为“点”的时候,笔触自然就会更平滑了。

      1. “2.笔触粗细平滑,取决于这些直线有多少条。” ->您这边采用多次重绘么?
        “3.想象一下,当直线近似为“点”的时候,笔触自然就会更平滑了”->直线近似为点的时候那岂不是驱动层面反馈回来的点需要很多?您那边每秒多少个点?我这边驱动层每秒差不多130左右个点。

        1. 2.我的方法是画出“透明的贝赛尔曲线”,然后沿着这个贝赛尔曲线,切分为多个区域,每个区域画一个实心圆。实心圆的直径与预先记录好的笔触的压力成正比。

          3.如果你能理解第2点,第3这个就不是问题了。了解一下贝赛尔曲线,组成这个曲线只需要几个关键点。

          可以参考这篇文章:Android Path 类运用实践

          实例2

  2. 你好, 看到你开发的手写原笔迹不错, 请问可以单独和你定制一套吗? 可以的话 QQ: 109479206

  3. 你好,能不能加下你qq呢,学习一下压感绘图,有几个问题想问问,怎么设置底下的四线方格呢,如果画图的时候手屏幕是怎么处理的呢??如何把手的触摸屏蔽掉呢??能不能发表一篇如何做压感绘图的一些技术点吧

    1. Hello。关于你的问题:
      1. “四线方格”是指汉字草稿格子吧?那是是一张图片,作为背景图而已。
      2. 手写时,手的屏蔽。可以在系统层直接屏蔽,即有笔的事件时,直接屏蔽手的事件的上报;也可以在 View 控件屏蔽。Android 的 MotionEvent 可以判断触摸事件的类型,直接屏蔽手的操作即可。

      1. 你好,希望你出一个api 或者简单的写一个demo ,那个手和比同时放到屏幕上时,如果笔和手都动,我想只监听比的滑动,view 层可以判断吗??

        1. 抱歉,最近比较忙。
          View 控件区分笔和手判断,可以参考
          android.view.MotionEvent public final int getToolType(int pointerIndex)
          在 onTouchEvent(MotionEvent event) 方法中调用这个 api ,返回值可以判断出触摸事件类型,例如 TOOL_TYPE_STYLUS, TOOL_TYPE_FINGER。
          当为 TOOL_TYPE_STYLUS 时,你处理画图即可。

      2. 真心加下你qq或者 用其他方式联系一下,或者关注一下你微博,交流一下可以吗

        1. 很少用QQ,微博。你可以发邮件给我。
          多利用搜索引擎,能解答你很多问题。
          kevinems
          (at)
          gmail.com

  4. 本公司有个项目正好要用到这个功能,我们项目也是用你们集团的E人E本,他们提供了这个功能的SDK,但我们还需要其它功能和这个原笔迹保存的文件需要能在windows里也能显示,因此我们必须要有这个控件的源代码来修改,你看能否合作.

  5. 实时画出来的笔迹,笔抬起的时候(结束时)是否还需要重新进行光滑处理然后再重绘出来?

  6. 你好 如何做到 “从左上往右下画的方向”↘(取paint的最小宽度) 和 “从右上往左下画的方向”↙(取paint的最大宽度) 方向 的 path 宽度分别是 min 和 max 值,这样写的好处就是写字非常好看,请问有思路吗

    1. 你好,你说的效果,理想的情况下的确是比较好的,我以前也考虑过。但是平板上我目前还做不到这种效果。

  7. 你好,电磁笔的压感值是2048.android端的压感值都是0~1的浮点值吗?
    0~2048(电磁笔) 对应 0~1(android)

      1. android 中
        frameworks\base\data\keyboards\.idc 文件中
        touch.pressure.scale = 0.005 会改变压力值。不是0~1,而是1~10.25.这个楼主有了解吗?

    1. 不好意思. 需要商业合作的话, 可以进一步交流.
      如果是个人兴趣开发, 目前遇到什么问题, 看我能否解答.

  8. 您好,目测应该是用二阶贝塞尔曲线实现的,想问下二阶贝塞尔曲线的三个点应该怎样取?我自己的思路是记录滑动位置的所有坐标,然后隔三个点就用贝塞尔曲线去描绘一遍,但是效果很不理想

  9. 您好,问一下铅笔的效果是怎么弄出来的,就是颜色不是纯黑,有黑白镶嵌的效果,可以说一下思路吗

    1. 通过将笔迹转化成一个一个连续的点,然后在点上画图片纹理,最终连成铅笔效果的线条。

  10. 您好,目前正在学习,想请教一下您一些相关知识,如何理解笔锋方向与笔锋长度的关系,绘制的相邻点之间,根据偏向求解控制点时的角度应该怎么选取,麻烦您了

  11. 你好,该项目还在运作吗?
    有项目需求看有没有合作机会
    可以邮箱直接沟通,谢谢

  12. 您好,请问压感的实现方便商业合作吗,或者购买源码?
    如果联系您,方便给个微信或者QQ联系方式吗

  13. 您好,我们有个软件有个小功能想实现手写签字,你开发的签字进行商业销售吗?方便的话留个联系方式

  14. 请问 绘图过程中支持横竖屏切换吗?如果支持,在屏幕旋转时,实现思路是什么样的?如何做到图像不变形的?谢谢!

  15. 最近需要,可合作,效果好价格不是问题,最好能有个demo,Android的,麻烦可以回复我下,如果可以顺带demo发我邮箱下,谢谢

  16. 你好,我们最近在开发一个Android端手写类应用,需要有铅笔、毛笔、钢笔等多种笔迹,看到您的SDK觉得比较合适,希望可以跟您合作,请问是否可以发送一个展示demo,以及您SDK的使用文档,我们这边给开发评估一下,如果可行,后续进行商务对接,非常感谢!

  17. 您好,博主。最近我们公司开发软件需要实现铅笔书写特效。看了您的,感觉很好。是否可以合作?效果好价格不是问题,最好能有个demo,Android的,麻烦可以回复我下,如果可以顺带demo发我邮箱下,谢谢。或提供其他联系方式详谈。

    盼复,谢谢!

  18. 您好,很想购买您开发的原笔迹手写产品,请问能否先发送一个demo到我的邮箱适用下?

  19. 你好,商业合作是给到源码吗, 需要实现一个毛笔,铅笔,钢笔,圆珠笔,带有笔锋的效果,并保存起来

回复 wwee 取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据