工作需要,对这方面做了一些了解

一般的手写对android canvas有点理解的应该都知道,只需要单纯的使用drawPath就可以在view上画画。

而手写笔的关键则是要让path的strokeWidth发生变化

这个令人头大了, 毕竟setPaint只能够设置一个paint,一旦改变paint的参数,整个path都会发生改变。

所以,我们只能够另辟蹊径。

我们可以先开一个arraylist(Point),用来记录我们在surfaceview(推荐在画画功能上使用surfaceview代替view,毕竟可以减轻ui线程的压力)上划过的坐标

         Point tmpPoint = new Point();tmpPoint.set((int) event.getX(), (int) event.getY());pointStack.add(tmpPoint);

大家想想手写笔变化的因素是什么,是速度!

所以,我们必须将我们划过屏幕的速度记录下来,并且!这个速度是要与我们的坐标点arraylist一一对应的,这样子我们才可以在之后画出我们想要的字。

android 为我们提供了 VelocityTracker 用来记录速度

我们只需要在滑动的时候调用VelocityTracker对象就可以记录下我们的速度

 case MotionEvent.ACTION_DOWN:if (mVelocityTracker == null) {// Retrieve a new VelocityTracker object to watch the velocity// of a motion.mVelocityTracker = VelocityTracker.obtain();} else {// Reset the velocity tracker back to its initial state.mVelocityTracker.clear();}// Add a user's movement to the tracker.mVelocityTracker.addMovement(event);path.moveTo(event.getX(), event.getY());draw();break;case MotionEvent.ACTION_MOVE:mVelocityTracker.addMovement(event);mVelocityTracker.computeCurrentVelocity(1000);double speed = getSpeed(VelocityTrackerCompat.getYVelocity(mVelocityTracker,event.getActionIndex()),VelocityTrackerCompat.getXVelocity(mVelocityTracker,event.getActionIndex()));Point tmpPoint = new Point();tmpPoint.set((int) event.getX(), (int) event.getY());pointStack.add(tmpPoint);strokeStack.add((float) (speed / 200));draw();break;

大家一定好奇,draw()方法是什么东西呢

draw方法就用刷新surfaceview的方法

注意,我们在这里定义了refreshArea可以让我们只更新手指附近的区域,可以让我们的ui刷新快很多!

我们使用path的qualTo方法,通过手指划过的三点(首末两点+中间的控制点)画出多条贝塞尔曲线,而没有一条path的strokeWidth则是由对应的速度决定的

 public void draw() {refreshArea = new Rect(drawing_point_end.x - Scale, drawing_point_end.y- Scale, drawing_point_end.x + Scale, drawing_point_end.y+ Scale);Canvas canvas = getHolder().lockCanvas(refreshArea);canvas.drawColor(Color.WHITE);for (int i = 2; i < pointStack.size(); i++) {Path path = new Path();drawing_point_start = pointStack.get(i - 2);drawing_point_middle = pointStack.get(i - 1);path.moveTo(drawing_point_start.x, drawing_point_start.y);if (strokeStack.get(i) > 25) {p.setStrokeWidth(25);} else {p.setStrokeWidth(strokeStack.get(i));}drawing_point_end = pointStack.get(i);path.quadTo(drawing_point_middle.x, drawing_point_middle.y,drawing_point_end.x, drawing_point_end.y);canvas.drawPath(path, p);}getHolder().unlockCanvasAndPost(canvas);}

这样画出来就像手写笔一样啦

这个功能我只是想出了原型,后续工作交给别的同事了大家也在这基础上好好发挥吧

android手写笔思路相关推荐

  1. Android手写笔应用的实现,android手写笔思路

    工作需要,对这方面做了一些了解 一般的手写对android canvas有点理解的应该都知道,只需要单纯的使用drawPath就可以在view上画画. 而手写笔的关键则是要让path的strokeWi ...

  2. android 手写笔,微软 Surface Duo 安卓机手写笔功能曝光:自然体验,手势操作

    IT之家5月25日消息 微软有望在今年晚些时候正式发售Surface Duo安卓手机,配备了骁龙855.6GB内存和1100万像素相机.由于Surface Duo的设计完成得很早,其配置规格目前变得中 ...

  3. android平板电脑手写笔应用,四款最佳手写笔平板推荐

    平板 腾讯数码讯(Lotus) 乔布斯曾说过:世界上最好的"手写笔"是手指.然而,这个言论却被苹果自身打破,iPad Pro的Apple Pencil充分证明,手写笔更适合精确的操 ...

  4. 微软PPM 软件 android,微软Surface Duo带来改进后的手写笔支持 Android系统也可顺滑无迟滞...

    这使得Surface Pen能够在不同的压力下,以及当你将操作从一个屏幕拖动到另一个屏幕时,Surface Pen会做出自然的反应,还会加上系统提供的手势操作,比如双击捕捉屏幕截图或执行快速点击打开微 ...

  5. android三星note20.6,三星Note20评测:这支手写笔是最大亮点?

    8月13日,万众瞩目的三星新一代5G旗舰Galaxy Note20系列在国内正式发布,这也就意味着2020下半年各大厂商旗舰机之间的对决正式拉开序幕. 当然,纸面参数并不能完全评判一款手机的好坏,产品 ...

  6. android平板触控笔,解锁平板的这些隐藏 配个手写笔就可以了

    解锁平板的这些隐藏 配个手写笔就可以了 2018年11月13日 15:34作者:罗程华编辑:罗程华文章出处:泡泡网原创 分享 一台平板电脑能够做什么? 对于普通人而言,平板电脑的用处可能就是听听歌,看 ...

  7. android平板电脑手写笔应用,安卓平板势微,华为M5能否救场?也支持手写笔,与新iPad比如何?...

    3月27日,苹果发布了新iPad,最大的亮点是搭载了A10 Fusion处理器,还支持Apple Pencil. 此外,它的价格是2588元起.这个价格很多用户还是可以接受的. 近期,华为也发布了一款 ...

  8. Android手写优化

    Android手写优化-平滑的签名效果实现 字数1552  阅读1800  评论2  喜欢4 前言   这是一篇从squareup翻译来的文章,原文在这,之前有人在TIEYE上翻译过这篇文章,但现在链 ...

  9. 苹果键盘怎么手写_手写笔的魅力

    请点击文末右下角"",移步官网获取更好阅读体验! 欢迎加入Augix官方QQ群:595698697. 喜讯!Augix已开通微博,请搜索关注:Augix频道. B站视频更新频道也已 ...

最新文章

  1. java具有自动无用内存回收_Java语言程序设计(一)试卷及答案解释
  2. php ImageMagick扩展
  3. 最牛B隐藏文件(续)
  4. python3 value查key的三种方法
  5. linux注释内容,Linux 中snmptrapd的内容有大虾能帮我注释下吗?谢谢了
  6. uni-app之新建项目无模板选择以及点击创建后一直卡住不动
  7. 你常吃的便利食品,正在加速你的衰老……研究发现饮食与DNA损伤有关
  8. 【转】去掉换行符的几个方法
  9. 漫步线性代数十——线性无关,基和维数
  10. mysql5.7 之 sql_mode=only_full_group_by问题
  11. # 20155224 第十一周 课堂练习《计算后缀表达式的值》
  12. 使用Zabbix的SNMP trap监控类型监控设备的一个例子
  13. Jupyter Notebook 代码补全功能配置
  14. UG(NX)二次开发 BlockUI 集列表使用方法
  15. Python 与金融科技2|数据的滑动平均值及多图可视化
  16. 矩阵相抵的一道例题(对称+主子式)
  17. Hutool(Excel工具使用)
  18. python权重是什么意思_在python带权重的列表中随机取值的方法
  19. VBS 常用总汇 (http://blog.csdn.net/sgear/article/details/1380223)
  20. undefined reference to 'function'及解决办法

热门文章

  1. 为Xcode6添加Empty Application选项
  2. 欧姆龙cx-one v4.6下载分享
  3. android端使用openCV实现车牌检测
  4. 莎士比亚风格的文本生成任务
  5. 代答题c语言,计算机二级考试《C语言》上机答题技巧
  6. 自动化办公 02_1 Excel_XLWings
  7. SLIC超像素生成算法
  8. 介绍一种在MATLAB中获取股市数据的方法
  9. android天天爱消除游戏挂机脚本的实现思路
  10. Android:实现简单的手机号码归属地查询功能