将MotionEvent传递给GridView

时间:2012-12-12 16:55:13

标签: android listview gridview scroll motionevent

以下是我想要实现的目标的摘要。 我有一个观点,在那个视图我正在听MotionEvent。 当它匹配特定条件时,我想将该MotionEvent传递给GridView,以便滚动。 我正在做类似

的事情
if (event.getAction() == MotionEvent.ACTION_MOVE) {
    if (condition match) {
        getGridView().dispatchTouchEvent(event);
    }
}

但它不会根据MotionEvent使我的网格滚动。也许它不是在听那种事件,但是因为没有" ScrollEvent"我不知道。

任何人都可以请我加油。我没有找到有用的文档。 谢谢。

2 个答案:

答案 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()来拦截动作,而不是更改分派机制。