GestureDetector 和 ScrollView混用后onFling无法正常工作

开始在学习用GestureDetector中的onFling,都正常,可是加入ScrollView后就没法响应了, google了很久,似乎也没个具体的方法,后来看到说用dispatchTouchEvent(MotionEvent ev) 的方法,果然可以,不过帖子没说具体怎么办,查了些文档,试验了几个方法,果然找到了一个,和大家分享下。
具体原因我也不是很明白,可能是因为ScrollView抢占了MotionEvent 事件,所以GestureDetector
捕获不到任何的touch event,自然就不会相应了,方法是@override
public boolean dispatchTouchEvent(MotionEvent ev) {
                mGestureDetector.onTouchEvent(ev);
                scroll.onTouchEvent(ev);
                return super.dispatchTouchEvent(ev);

        }
然后发送MotionEvent分别给你的GestureDetector和ScrollView,而不是dispatchMotionEvent,我猜 测dispatch后会被ScrollView先取走,从而GestureDetector就无法响应了,所以这里就都派发出去。
声明,我试验过了,是可以的,不过没有理论上面的支撑,所以哪位知道的还请给个具体些的解释哈

 

 

eg1:

从今天解决的一个问题了解到, viewGroup的dispatchTouchEvent方法会在其onInterceptTouchEvent方法之前被触发.

又搜了些资料,个人觉得最受用的总结如下:

首先触发ACTIVITY的dispatchTouchEvent

然后触发ACTIVITY的onUserInteraction

然后触发LAYOUT的dispatchTouchEvent

然后触发LAYOUT的onInterceptTouchEvent

 

供参考的文章蛮多的,我不再废话了:

http://blog.csdn.net/iefreer/archive/2009/09/23/4586351.aspx

http://blog.csdn.net/ddna/archive/2010/04/11/5473293.aspx

http://blog.csdn.net/ddna/archive/2010/04/05/5451722.aspx

http://blog.csdn.net/G_rrrr/archive/2009/11/24/4861189.aspx


你可能感兴趣的:(android)