ACTION_UP dispatchTouchEvent 中的事件被延迟触发

ACTION_UP Event in dispatchTouchEvent is Getting Triggered Late

我做了一个轻扫手势并从 ScrollView 中的 dispatchTouchEvent 跟踪它。但是,一帧后检测到滑动手势的结束。请参阅下面的最后两个事件,最后两个手势是 ACTION_MOVE 和 ACTION_UP。但是他们的接触点是完全一样的,只是eventTimes不同

action=ACTION_MOVE, x[0]=734.165, y[0]=1241.4056, historySize=2, eventTime=136103401 action=ACTION_MOVE, x[0]=747.8897, y[0]=1077.508, historySize =2, eventTime=136103418 action=ACTION_UP, x[0]=747.8897, y[0]=1077.508, historySize =0, eventTime=136103432

136103432 - 136103418 = 14。因此 ACTION_UP 在 14 毫秒后被检索。这阻止了我在手指离开屏幕后立即执行的一些平滑效果。

您可以从这里查看完整日志:https://zerobin.net/?a71539bf3862abdb#xXjCPrjk/Fi7l+N++9oivQkieFRQ3KA6gwQ0pU2NTYc=

那么,如何在 dispatchTouchEvent 中更早地检测到 ACTION_UP?

你无法检测到 ACTION_UP 直到它发生。用户可能会将手指放在屏幕上几秒钟,因此您可能需要重新考虑您的设计

此问题已在 Android P 中修复。看起来 Google 决定进行一些真正的 UI 动画改进。