ViewGroup中的onInterceptTouchEvent和onTouchEvent调用时序

最近在做android类似slidemenu项目,遇到了scrollerview在fragment中没有响应手势滑动的动作

仔细研究了下并参考别人的研究成果

基本的规则是:
1. ondown事件总是会先走onInterceptTouchEvent()方法

2. 如果ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后 返回false,那么后续的move, up等事件将继续会先传递给该ViewGroup,之后才和down事件一样传递给最终的目标view的onTouchEvent()处理。 会传递到目标view中去。

3. 如果该ViewGroup的onInterceptTouchEvent()在接收到down事件处理完成之后 return true,那么后续的move, up等事件将不再传递给onInterceptTouchEvent(),而是和down事件一样传递给该ViewGroup的onTouchEvent()处理,注意, 目标view将接收不到任何事件

4.  如果最终需要处理事件的view的onTouchEvent()返回了false(没有消费该事件),那么该事件将被传递至其上一层次的view(父view层)的onTouchEvent()处理。

5.  如果最终需要处理事件的view 的onTouchEvent()返回了true(已消费事件),那么后续事件将可以继续传递给该view的onTouchEvent()处理。


onInterceptTouchEvent返回true的时候,表示事件被拦截,只在根view中响应相关touch事件
onInterceptTouchEvent返回false的时候,表示没有拦截,子view正常响应事件
onTouchEvent返回false的时候,表示事件没有被消费,事件会顺序上传到parentview去。
onTouchEvent返回true的时候,表示事件已消费,事件不会再作传递。

参考 :http://www.blogjava.net/TiGERTiAN/archive/2011/02/22/344869.html
http://blog.csdn.net/bigapple88/article/details/7658938

猜你喜欢

转载自hellorheaven.iteye.com/blog/2068570