android 的 onTouchEvent 的 ACTION_MOVE 事件, 如何提高获取的频率?

2020-08-20 17:04:35 +08:00
 leven87

Hello,现在在做一个项目。当用户在画板上( View )画图时,需要通过捕获 onTouchEvent 的 ACTION_MOVE,来获取画笔移动的点的轨迹。

现在遇到的问题是,这个事件触发的频率太低,导致获取的点不够多。想请问,有没有什么办法,可以提高这一事件的触发频率?

谢谢!

5437 次点击
所在节点    Android
15 条回复
Melodyer
2020-08-20 17:09:56 +08:00
gam2046
2020-08-20 17:22:36 +08:00
触屏的采样率决定了上限,同样的程序,使用性能更好的设备,测试一下看。
wuketidai
2020-08-20 20:41:52 +08:00
感觉方向错了,应该设计算法让 Path 更加平滑上优化吧
leven87
2020-08-20 20:48:11 +08:00
@wuketidai 没有足够的点,很难平滑呀。 当然有些采样技术可以模拟出一些点。
leven87
2020-08-20 20:51:55 +08:00
@gam2046 也许吧。 现在 1s 时间 可以采集 50 个点。 不知道快慢了。如果不能提升,要想写其它办法。
DeweyReed
2020-08-20 21:00:17 +08:00
wuketidai
2020-08-20 21:05:02 +08:00
Blanke
2020-08-21 09:24:34 +08:00
之前做过类似的应用,没遇到过这个问题
krystal9527
2020-08-21 09:56:06 +08:00
@leven87 可以用贝塞尔曲线绘制运动轨迹,很好看,不会有毛刺
krystal9527
2020-08-21 09:59:13 +08:00
leven87
2020-08-24 16:50:44 +08:00
@krystal9527 谢谢。不过贝塞尔曲线好像不能让我获取更多的点。我是要获取绘图轨迹上的点,越多越好,也就是说每调用 ACTION_MOVE 会记录一下坐标值( x,y )。
不过这个曲线很棒,我会加在我代码里。谢谢
Cabana
2020-08-26 09:38:16 +08:00
之前也做过画板的路过,MotionEvent.getHistoryXXXX()方法可解,触摸事件其实被采样的频率很高的,只是回调到上层时太高的频率对下游事件处理压力和帧率的考虑,做了类似"throttle"的处理,其余的事件可以通过 #6 楼官方文档的方式拿到。
leven87
2020-08-27 17:04:52 +08:00
@Cabana 谢谢,我尝试一下!
leven87
2020-08-27 23:57:57 +08:00
@DeweyReed @Cabana 感谢,帮大忙了。 我用 batching 的方法,从原来的 50 点 /秒,提高到 150 点 /秒。 当然,也在落笔和抬笔的时候,出现了不少重复的点。
rangoBen
2020-08-31 11:35:04 +08:00
按照 16ms 的频率进行采样是不是就足够了。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/699998

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX