0

这是我试图实现的目标的总结。我有一个观点,在那个观点上我正在监听 MotionEvent。当它匹配特定条件时,我想将该 MotionEvent 传递给 GridView,以便滚动。我正在做类似的事情

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

但它不会使我的网格根据 MotionEvent 滚动。也许它没有在听那种事件,但由于没有“ScrollEvent”,我不知道。

任何人都可以请启发我。我没有发现文档有帮助。谢谢你。

4

2 回答 2

0

为了处理运动事件,视图需要获取与该运动相关的完整事件集。

例如,一个卷轴应该以 开头MotionEvent.ACTION_DOWN,然后是几个MotionEvent.ACTION_MOVE,最后以MotionEvent.ACTION_UP. 您不能只分派这些事件之一,需要分派整个事件集,以便视图能够解码滚动运动。

问候。

于 2012-12-12T17:55:08.407 回答
0

Luis 解释了您的网格视图不滚动的原因。事实上,这样的调度是不正确的。你说要把View A的MotionEvent传给View B。但是一个motion中的x和y是相对于view的,不能直接在另一个view中使用。尝试查看 ViewGroup.dispatchTouchEvent() 的源代码,ViewGroup 会在将动作分派给孩子之前对其进行转换。如果视图 B 是视图 A 的子视图,则应使用 onInterceptTouchEvent() 来拦截运动,而不是更改调度机制。

于 2012-12-12T18:09:06.933 回答