gpt4 book ai didi

Android ACTION_MOVE 阈值

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:33:48 28 4
gpt4 key购买 nike

我正在编写一个应用程序,该应用程序涉及使用手指或手写笔在屏幕上书写。我有那部分工作。在 ACTION_DOWN 上,开始绘制;在 ACTION_MOVE 上,添加线段;在 ACTION_UP 上,完成行。

问题是在 ACTION_DOWN 之后,指针显然需要从它开始的地方 move 超过 10 个像素(基本上是起点周围的 20x20 框)才能开始发送 ACTION_MOVE 事件。离开盒子后, move 事件都非常准确。 (我通过测试找出了 10 像素的东西。)因为这是用来写字或画画的,所以 10 像素是一个相当大的损失:取决于你想写的有多小,你可能会丢失第一个字母或两个。我还没有找到任何关于它的信息——只有一两个论坛上的几个帖子,比如 http://android.modaco.com/topic/339694-touch-input-problem-not-detecting-very-small-movements/page_pid_1701028#entry1701028 .它似乎存在于某些设备或系统上,而不存在于其他设备或系统上。但是,不知道如何在拥有它时摆脱它。

我使用的是搭载 Android 3.1 的 Galaxy Tab 10.1。我尝试了几种不同的方法来尝试摆脱它:我尝试将事件的坐标设置为其他东西,看看我是否可以欺骗它认为光标在不同的地方;我尝试在更改坐标的情况下重新分派(dispatch)事件(我的处理程序对新点使用react,但仍然没有响应 10 像素半径内的 move 。)我在源代码中搜索了任何对该效果的引用,并没有发现(虽然我认为它来自不同版本的 Android - 3.1 的代码尚未发布,是吗?)我已经搜索了查询指针当前状态的方法,所以我可以有一个计时器捕捉变化,直到指针越过阈值。没有相应的 move 事件,找不到任何获取指针坐标的方法。没有任何效果。有人对此一无所知,或者有任何想法或解决方法吗?谢谢。

-- 更新:拖放事件显示相同的阈值。

最佳答案

我部分同意@passsy 的帖子,但得出不同的结论。首先如前所述,mTouchSlop 是我们感兴趣的值,它通过 ViewConfiguration.get(context).getScaledTouchSlop();

公开

如果您检查 ViewConfiguraton 的 Android 源代码,TOUCH_SLOP 的默认值为 8dip,但评论中提到此值只是一个后备值,实际值是在该特定设备的 Android 操作系统是建成。 (它可能大于或小于该值。它似乎适用于 Galaxy Tab 设备)

更具体的代码示例,mTouchSlop 值是在 View 初始化时从 ViewConfiguration 中读取的,但该值仅在 onTouchEvent 方法中访问。如果您扩展 View 并覆盖此方法(不调用 super),则 View 类中的 mTouchSlop 的行为不再相关。

(对我们来说)更能说明问题的是,当更改 Android 设置以在屏幕上覆盖触摸事件时,带有小拖动的触摸不会注册为运动事件,Android 操作系统的十字准线确实如此不动。由此我们得出的结论是,最小拖动距离 是在操作系统级别强制执行的,您的应用程序永远不会知道小于 TOUCH_SLOP 值的拖动事件。您还应注意,不应直接使用 TOUCH_SLOP 并且 API 弃用了 getTouchSlop 方法并推荐采用设备屏幕尺寸的 getScaledTouchSlop像素密度考虑在内。这样做的副作用是在不同设备上感知的实际最小行程长度可能会有所不同。例如,在 Galaxy Tab 2.0 7.0"上感觉我们能够使用与在 Galaxy Tab 2.0 10.1"上运行时相同的代码库绘制更短的最小笔划

您还应注意(如果您找到改变此值的方法),此值决定了 Android 系统如何区分轻击和敲击。也就是说,如果您点击屏幕但手指在执行点击时有轻微 move ,如果 move 小于 TOUCH_SLOP 将被解释为点击,但如果 move 超过 则将被解释为敲击TOUCH_SLOP。因此,将 TOUCH_SLOP 设置为较小的值会增加点击被解释为笔划的可能性。

我们自己的结论是,这个最小距离在实践中是无法改变的,是我们需要忍受的。

关于Android ACTION_MOVE 阈值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6785068/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com