android手写笔思路
工作需要,对这方面做了一些了解
一般的手写对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手写笔思路相关推荐
- Android手写笔应用的实现,android手写笔思路
工作需要,对这方面做了一些了解 一般的手写对android canvas有点理解的应该都知道,只需要单纯的使用drawPath就可以在view上画画. 而手写笔的关键则是要让path的strokeWi ...
- android 手写笔,微软 Surface Duo 安卓机手写笔功能曝光:自然体验,手势操作
IT之家5月25日消息 微软有望在今年晚些时候正式发售Surface Duo安卓手机,配备了骁龙855.6GB内存和1100万像素相机.由于Surface Duo的设计完成得很早,其配置规格目前变得中 ...
- android平板电脑手写笔应用,四款最佳手写笔平板推荐
平板 腾讯数码讯(Lotus) 乔布斯曾说过:世界上最好的"手写笔"是手指.然而,这个言论却被苹果自身打破,iPad Pro的Apple Pencil充分证明,手写笔更适合精确的操 ...
- 微软PPM 软件 android,微软Surface Duo带来改进后的手写笔支持 Android系统也可顺滑无迟滞...
这使得Surface Pen能够在不同的压力下,以及当你将操作从一个屏幕拖动到另一个屏幕时,Surface Pen会做出自然的反应,还会加上系统提供的手势操作,比如双击捕捉屏幕截图或执行快速点击打开微 ...
- android三星note20.6,三星Note20评测:这支手写笔是最大亮点?
8月13日,万众瞩目的三星新一代5G旗舰Galaxy Note20系列在国内正式发布,这也就意味着2020下半年各大厂商旗舰机之间的对决正式拉开序幕. 当然,纸面参数并不能完全评判一款手机的好坏,产品 ...
- android平板触控笔,解锁平板的这些隐藏 配个手写笔就可以了
解锁平板的这些隐藏 配个手写笔就可以了 2018年11月13日 15:34作者:罗程华编辑:罗程华文章出处:泡泡网原创 分享 一台平板电脑能够做什么? 对于普通人而言,平板电脑的用处可能就是听听歌,看 ...
- android平板电脑手写笔应用,安卓平板势微,华为M5能否救场?也支持手写笔,与新iPad比如何?...
3月27日,苹果发布了新iPad,最大的亮点是搭载了A10 Fusion处理器,还支持Apple Pencil. 此外,它的价格是2588元起.这个价格很多用户还是可以接受的. 近期,华为也发布了一款 ...
- Android手写优化
Android手写优化-平滑的签名效果实现 字数1552 阅读1800 评论2 喜欢4 前言 这是一篇从squareup翻译来的文章,原文在这,之前有人在TIEYE上翻译过这篇文章,但现在链 ...
- 苹果键盘怎么手写_手写笔的魅力
请点击文末右下角"",移步官网获取更好阅读体验! 欢迎加入Augix官方QQ群:595698697. 喜讯!Augix已开通微博,请搜索关注:Augix频道. B站视频更新频道也已 ...
最新文章
- java具有自动无用内存回收_Java语言程序设计(一)试卷及答案解释
- php ImageMagick扩展
- 最牛B隐藏文件(续)
- python3 value查key的三种方法
- linux注释内容,Linux 中snmptrapd的内容有大虾能帮我注释下吗?谢谢了
- uni-app之新建项目无模板选择以及点击创建后一直卡住不动
- 你常吃的便利食品,正在加速你的衰老……研究发现饮食与DNA损伤有关
- 【转】去掉换行符的几个方法
- 漫步线性代数十——线性无关,基和维数
- mysql5.7 之 sql_mode=only_full_group_by问题
- # 20155224 第十一周 课堂练习《计算后缀表达式的值》
- 使用Zabbix的SNMP trap监控类型监控设备的一个例子
- Jupyter Notebook 代码补全功能配置
- UG(NX)二次开发 BlockUI 集列表使用方法
- Python 与金融科技2|数据的滑动平均值及多图可视化
- 矩阵相抵的一道例题(对称+主子式)
- Hutool(Excel工具使用)
- python权重是什么意思_在python带权重的列表中随机取值的方法
- VBS 常用总汇 (http://blog.csdn.net/sgear/article/details/1380223)
- undefined reference to 'function'及解决办法