我在测试过程中遇到了一个非常奇怪的场景,也许你可以照亮我。
场景: 该应用程序包含在 Surfaceview 中,我在其中处理触摸事件。我的屏幕上有一个图像,用户将手指放在上面,然后将其收回。就像短按按钮一样。
出了什么问题:
配备 SuperAmoled 屏幕的三星 Galaxy S - 触发的触摸事件为:向下,然后向上。就像平常一样
Nexus One、Desire - 触发的触摸事件有:向下、移动、移动、向上 移动手势很小,例如 +- 1 px,但确实存在。现在想象一下,我有在 Move 事件中触发的代码。
因此,在我的 Galaxy S 上进行测试一切正常,在 Nexus 上进行测试却失败了,因为它没有按预期做出反应。
我的问题:
使用布尔标志来防止代码在 Move 事件中运行,方法是在 down 事件中将标志设置为 true,然后调用方法。
这是由于设备显示灵敏度造成的。我在三星 Galaxy 10 和 10+ 上遇到了这种破坏行为。当手指没有移动时,显示屏会捕获这些微动作并向我发送动作,从而打破了通常的点击逻辑。
解决了这个问题,我实现了一个以点为单位的阈值(在我的例子中为20点,移动距离像素*密度)以完全过滤掉这些微移动。
仅针对第一个移动事件检查阈值。因此,在超过阈值之前,所有移动都会被忽略,但如果移动最终超过阈值,所有进一步的移动都会被接受,直到下一个手指按下事件。