以下是我想要实现的目标的摘要。 我有一个观点,在那个视图我正在听MotionEvent。 当它匹配特定条件时,我想将该MotionEvent传递给GridView,以便滚动。 我正在做类似
的事情if (event.getAction() == MotionEvent.ACTION_MOVE) {
if (condition match) {
getGridView().dispatchTouchEvent(event);
}
}
但它不会根据MotionEvent使我的网格滚动。也许它不是在听那种事件,但是因为没有" ScrollEvent"我不知道。
任何人都可以请我加油。我没有找到有用的文档。 谢谢。
答案 0 :(得分:0)
为了处理动作事件,视图需要获取与该动作相关的全部事件。
例如,滚动应以MotionEvent.ACTION_DOWN
开头,后跟多个MotionEvent.ACTION_MOVE
,并以MotionEvent.ACTION_UP
结束。您不能只调度其中一个事件,需要为视图调度整个集合才能解码滚动运动。
问候。
答案 1 :(得分:0)
Luis解释了网格视图无法滚动的原因。实际上这种调度是不正确的。 你说你想要将视图A的MotionEvent传递给视图B.但是动作中的x和y是相对于视图的,不能直接在另一个视图中使用。尝试查看ViewGroup.dispatchTouchEvent()的源代码,ViewGroup将在将动作分派给子项之前对其进行转换。 如果视图B是视图A的子视图,则应使用onInterceptTouchEvent()来拦截动作,而不是更改分派机制。