漏洞
我的钢琴应用程序中有一个奇怪的错误。有时键(以及音符)会挂起。我做了很多调试,并将其缩小到看起来像 androids 不准确的运动事件处理:
DEBUG/(2091): ACTION_DOWN A4
DEBUG/(2091): KeyDown: A4
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_MOVE A4 => A4
DEBUG/(2091): ACTION_MOVE ignoring
DEBUG/(2091): ACTION_UP B4 //HOW CAN THIS BE????
DEBUG/(2091): KeyUp: B4
DEBUG/(2091): Stream is null, can't stop
DEBUG/(2091): Hanging Note: A4 X=240-287 EventX=292 Y=117-200 EventY=164
DEBUG/(2091): KeyUp Note: B4 X=288-335 EventX=292 Y=117-200 EventY=164
很明显,在这里可以看出,我突然有了ACTION_UP
另一个笔记。我不应该绝对获得ACTION_MOVE
第一吗?
如日志最后所示,肯定不是区域检测错误,因为ACTION_UP
事件明显在B4区域。
记录实现细节
每次onTouchEvent()
通话都会被记录,因此记录是准确的。
ACTION_MOVE 日志的相关伪代码是:
Key oldKey = Key.get(event.getHistoricalX(), event.getHistoricalY());
Key newKey = Key.get(event.getX(), event.getY());
问题
这是 Android 的正常行为(坐标跳跃)吗?
可以在ACTION_UP
没有任何先前ACTION_MOVE
坐标的情况下发生吗?