V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
leven87
V2EX  ›  Android

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

  •  
  •   leven87 · 2020-08-20 17:04:35 +08:00 · 9486 次点击
    这是一个创建于 1554 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    谢谢!

    15 条回复    2020-08-31 11:35:04 +08:00
    gam2046
        2
    gam2046  
       2020-08-20 17:22:36 +08:00   ❤️ 1
    触屏的采样率决定了上限,同样的程序,使用性能更好的设备,测试一下看。
    wuketidai
        3
    wuketidai  
       2020-08-20 20:41:52 +08:00
    感觉方向错了,应该设计算法让 Path 更加平滑上优化吧
    leven87
        4
    leven87  
    OP
       2020-08-20 20:48:11 +08:00
    @wuketidai 没有足够的点,很难平滑呀。 当然有些采样技术可以模拟出一些点。
    leven87
        5
    leven87  
    OP
       2020-08-20 20:51:55 +08:00
    @gam2046 也许吧。 现在 1s 时间 可以采集 50 个点。 不知道快慢了。如果不能提升,要想写其它办法。
    wuketidai
        7
    wuketidai  
       2020-08-20 21:05:02 +08:00
    Blanke
        8
    Blanke  
       2020-08-21 09:24:34 +08:00 via Android
    之前做过类似的应用,没遇到过这个问题
    krystal9527
        9
    krystal9527  
       2020-08-21 09:56:06 +08:00   ❤️ 1
    @leven87 可以用贝塞尔曲线绘制运动轨迹,很好看,不会有毛刺
    leven87
        11
    leven87  
    OP
       2020-08-24 16:50:44 +08:00
    @krystal9527 谢谢。不过贝塞尔曲线好像不能让我获取更多的点。我是要获取绘图轨迹上的点,越多越好,也就是说每调用 ACTION_MOVE 会记录一下坐标值( x,y )。
    不过这个曲线很棒,我会加在我代码里。谢谢
    Cabana
        12
    Cabana  
       2020-08-26 09:38:16 +08:00   ❤️ 1
    之前也做过画板的路过,MotionEvent.getHistoryXXXX()方法可解,触摸事件其实被采样的频率很高的,只是回调到上层时太高的频率对下游事件处理压力和帧率的考虑,做了类似"throttle"的处理,其余的事件可以通过 #6 楼官方文档的方式拿到。
    leven87
        13
    leven87  
    OP
       2020-08-27 17:04:52 +08:00
    @Cabana 谢谢,我尝试一下!
    leven87
        14
    leven87  
    OP
       2020-08-27 23:57:57 +08:00
    @DeweyReed @Cabana 感谢,帮大忙了。 我用 batching 的方法,从原来的 50 点 /秒,提高到 150 点 /秒。 当然,也在落笔和抬笔的时候,出现了不少重复的点。
    rangoBen
        15
    rangoBen  
       2020-08-31 11:35:04 +08:00
    按照 16ms 的频率进行采样是不是就足够了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3101 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 19ms · UTC 13:46 · PVG 21:46 · LAX 05:46 · JFK 08:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.