2012-12-12 47 views
0

下面是我试图实现的一个总结。 我有一个视图,在这个视图我听MotionEvent。 当它匹配一个特定的条件时,我想将该MotionEvent传递给一个GridView,以便滚动。 我在做类似的东西将MotionEvent传递给GridView

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

不过,这并不让我的网格根据MotionEvent滚动。也许它不会听这种事件,但因为没有“ScrollEvent”我不知道。

任何人都可以请我关于这一点。我没有找到文档帮助。 谢谢。

回答

0

为了处理动作事件,视图需要获取与该动作相关的全套事件。

例如,滚动应该从MotionEvent.ACTION_DOWN开始,接着是几个MotionEvent.ACTION_MOVE,并且以MotionEvent.ACTION_UP完成。您不能仅派发其中一个事件,需要派发整套视图以便能够解码滚动移动。

问候。

0

路易斯已经解释了为什么你的网格视图不滚动的原因。实际上这种派遣是不正确的。 你说过要将视图A的MotionEvent传递给视图B.但是,运动中的x和y是相对于视图的,并且不能直接在另一个视图中使用。尝试查看ViewGroup.dispatchTouchEvent()的源代码,ViewGroup将在将其分派给子级之前对其进行转换。 如果视图B是视图A的子视图,则应使用onInterceptTouchEvent()截取运动,而不是更改分派机制。

+0

谢谢你们的答案。对于那个问题的人,我做了搜索。为了我的信息并在下次增加我的问题技能,你可以解释你为什么选择。问题很明显,我只是采取了错误的方法,由于它不正确,我无法找到实现我想要的提示。 – Mostrapotski

相关问题