转自:http://yxwww.iteye.com/blog/1409461
本文的目的在于测试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
那么
<!--[endif]-->
4、FirstGroup的onInterceptTouchEvent() 返回 false
并且FirstGroup的onTouchEvent()返回true
那么
<!--[endif]-->
5、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 true
并且 SecondGroup的onTouchEvent()返回false
那么从属于SecondGroup的所有child view的touch事件都被SecondGroup给截取了:
<!--[endif]-->
6、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 true
并且 SecondGroup的onTouchEvent()返回true
<!--[endif]-->
7、FirstGroup的onInterceptTouchEvent() 返回 false
SecondGroup 的onInterceptTouchEvent() 返回 false
并且SecondGroup的onTouchEvent() 返回true
<!--[endif]-->
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.
分享到:
相关推荐
本篇文章小编为大家介绍,Android onTouchEvent 与 onInterceptTouchEvent的区别详解。需要的朋友参考下
onInterceptTouchEvent与OntouchEvent之间的事件传递机制的具体内涵关系...
关于onInterceptTouchEvent和onTouchEvent使用demo,很不错的一个demo,可以帮助Android的触摸事件。
onInterceptTouchEvent和onTouchEvent调用关系详解
NULL 博文链接:https://2528.iteye.com/blog/1056731
onInterceptTouchEvent ontouchevent 的一个执行顺序和关于返回值的小demo 希望有点用
NULL 博文链接:https://username2.iteye.com/blog/2193153
重写onTouchEvent事件,实现上下左右滑动的小例子。
事件传递方法包括dispatchTouchEvent、onTouchEvent、onInterceptTouchEvent,其中前两个是View和ViewGroup都有的,最后一个是只有ViewGroup才有的方法。这三个方法的作用分别是负责事件分发、事件处理、事件拦截。 ...
重写onTouchEvent实现滑屏显示菜单,内有缓存,数据库存储
onInterceptTouchEvent 和 onTouchEvent 研究
我们也许会遇到,自定义控件的触屏事件处理,先来了解一下View类中的,onTouch事件和onTouchEvent事件。 1、boolean onTouch(View v, MotionVent event) 触摸事件发送到视图时调用(v:视图,event:触摸事件) 返回...
onInterceptTouchEvent和onTouchEvent调用时序
Title : dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent三者对MotionEvent的分发、拦截机制分析 Author: yaong Category:自己做的Demo Tips : 三个自定义View,依次嵌套,并各自覆写拦截、监听方法,通过...
onInterceptTouchEvent与onTouchEvent事件传递的分析
最难理解的其实是onTouchEvent方法。 一、 概述 1.只有view,ViewGroup,Activity 具有事件分发和消费的功能。 2.Activity因为上最先接触到触摸事件,因此Activity没有事件拦截方法。即没有dispatchTouchEvent方法。...
一般顺序是是:父控件的:dispatchTouchEvent,onInterceptTouchEvent,子控件的dispatchTouchEvent,onTouchEvent。如果子控件消费掉触摸事件,父控件就不再执行onTouch了 如果做一些特殊处理,子控件的有些方法...