本文的目的在于测试android viewgroup中 touchevent的传递方向。
ViewGroup 中onInterceptTouchEvent()
View 结构:
FirstGroup SecondGroup Child
1、默认情况下: super.onInterceptTouchEvent() super.onTouchEvent() 都是返回false. 这个时候的传递方向(注意,这个时候并没有触发Move事件!):
2、假如FirstGroup的onInterceptTouchEvent() 返回 true 那么从属于FirstGroup的所有child view的touch事件都被FirstGroup给截取了: 3、FirstGroup的onInterceptTouchEvent() 返回 true 并且 FirstGroup的onTouchEvent()返回true 那么
4、FirstGroup的onInterceptTouchEvent() 返回 false 并且FirstGroup的onTouchEvent()返回true 那么
5、FirstGroup的onInterceptTouchEvent() 返回 false SecondGroup 的onInterceptTouchEvent() 返回 true 并且 SecondGroup的onTouchEvent()返回false 那么从属于SecondGroup的所有child view的touch事件都被SecondGroup给截取了:
6、FirstGroup的onInterceptTouchEvent() 返回 false SecondGroup 的onInterceptTouchEvent() 返回 true 并且 SecondGroup的onTouchEvent()返回true
7、FirstGroup的onInterceptTouchEvent() 返回 false SecondGroup 的onInterceptTouchEvent() 返回 false 并且SecondGroup的onTouchEvent() 返回true
8、FirstGroup的onInterceptTouchEvent() 返回 false SecondGroup 的onInterceptTouchEvent() 返回 false 并且SecondGroup的onTouchEvent() 返回false Child的onTouchEvent()返回true
总结 根ViewGroup的onInterceptTouchEvent() 是否要拦截(注意,拦截必须在第一次action down的时候!)touch event如果true,就是拦截所有的touch事件,并交给当前的viewgroup去处理!不拦截的话,就交给儿子ViewGroup处理touch event,同样的,要是它不拦截,就可以继续传递下去给儿子(也就是根ViewGroup的孙子) 如果目标view的 touch event返回false,那么,所有都不会产生action move动作;如果返回true,那么,目标view会产生touch event,而且会触发它的父view们onInterceptEvent 的 action move,注意并不会触发他们的touch event~ 一般情况下: onInterceptTouchEvent()是自Root 到 Child(要记得在Action Down中处理) onTouchEvent()是自Child 到 Root. |
|
来自: JUST SO LAZY > 《java\android》