android 快速理解事件分发机制
来源:互联网 发布:mybatis sql注入 编辑:程序博客网 时间:2024/05/19 16:02
事件的触发成功其实有三个坎,只有这三个坎都过了才能让我们见到他的触发效果。那么到底是哪三个方法阻
碍了事件的分发呢??下面我先一个一个的介绍,当然这里触发的顺序也是按数序。
一.onInterceptTouchEvent事件
这个方法主要是viewgroup的事件拦截,也就是说是view父类的方法。如果你是最基础的view那么你就
不会有这个方法,其实想想也对你没有子view拦截什么呀。这个方法如果设置true的话那么touch事件就不会传入
子view中去,意思就是说如果你在父view这里设置true的话,那个触摸事件只能在父view触发。举个例子就是如
果你有一个相对布局,里面有一个button。这里你对相对布局里面设置了onInterceptTouchEvent事件是true
的话,那么你对button的点击事件就失效了。这里的touch事件其实已经被相对布局所拦截。一般情况下默认设置
false。
@Override public boolean onInterceptTouchEvent(MotionEvent ev) { return super.onInterceptTouchEvent(ev); }
二.dispatchTouchEvent事件
这个方法是事件的分发,也就是你需要触发onTouchEvent事件不但需要父view的onInterceptTouchEvent
同意,还需要本身的dispatchTouchEvent的事件同意分发这个事件,onTouchEvent事件才有资格处理这个事
件。不然的话那么这个事件只能又返回到父view去消费了!!
<span style="font-family:SimSun;"> @Override public boolean dispatchTouchEvent(MotionEvent ev) { return super.dispatchTouchEvent(ev); }</span>
三.onTouchEvent事件
首先系统view的onTouchEvent事件中包含了一系列的action,例如
ACTION_CANCEL ACTION_DOW ACTION_UP ACTION_MOVE ACTION_OUTSIDE
这些动作组成。一次事件只有在第一个action返回true之后才会接下来发生另一个动作。
onTouchEvent这个方法最后会返回一个true or false 表示这个事件是否消费。当它返回true的时候表示这个事件消费了,false表示没有消费就
会返回到父类去消费。当然 onTouchEvent事件中的action过程中只要首先有一个返回true or false 那么这个事件对应的就全都是true or
false,因为一次onTouchEvent事件只能有一个返回值。当然你的下一次onTouchEvent事件又可以重新定义了。(一次action就会调用一次
onTouchEvent事件,onTouchEvent事件包含了一系列的action)
@Override public boolean onTouchEvent(MotionEvent event) { return super.onTouchEvent(event); }
四.事件的分发的相关性
这里我来系统的说明一下他们之间的关系:
一.事件先传到父view 的onInterceptTouchEvent方法中判断是否拦截事件传递到子view(一般系统默
认不拦截),如果拦截的话那么父view自己消费继续下面的二与三方法。事件拦截是从父view开始。
二.当一中表明不拦截,那么事件传递到底层子view的dispatchTouchEvent方法中判断是否分配(一般系
统默认分配),如果不允许分配的话,那么事件就会返回到父view去执行二与三方法。
三.当二中显示允许传递那么接下来就是onTouchEvent事件判断是否消费(这里一般系统默认消费),如果
onTouchEvent事件显示不消费的那么事件就会返回到父view中去执行二.三方法判断是否消费这个事件(这里
说明下onTouchEvent消费事件都是从最底层view开始处理)。
四。下面是view之间的响应方法的关系图
五.总结
五.总结
这里我是根据网上的一些大牛的文章总结而来,只是简单的介绍一下他们之间的关系。对于简单的了解因该是
够了。如果你想要深入源码了解他们的机制的话,下面我推荐一下guolin大神的文
章:http://blog.csdn.net/guolin_blog/article/details/9097463
- android 快速理解事件分发机制
- Android 快速理解事件分发
- android 快速理解view的事件分发
- 理解Android中的TouchEvent事件分发机制
- 关于Android事件分发机制的理解
- 深入理解Android事件分发机制
- Android中事件分发机制理解
- Android 事件分发机制 理解杂谈
- Android事件分发机制------------>验证+理解
- 深入理解Android事件分发机制
- Android事件分发机制的理解
- 一步步理解Android事件分发机制
- Android View事件分发机制理解
- Android事件分发机制简单理解
- android 事件分发机制 概念理解
- 完全理解android事件分发机制
- Android事件分发机制的理解
- Android事件分发消费机制理解
- Remote debug in windows
- Java基础知识总结(绝对经典)
- 【Unity快速实现小功能】NGUI篇——实现点击有链接的文本
- android导入工程时style出错Error retrieving parent for item: No resource found that matches the given name '
- Same Tree
- android 快速理解事件分发机制
- Qt Gui编程中两种创建窗体界面方法
- 坝良潘茁放持疗寡烟切诠隙挪直碳
- 12月——英语小结
- Linux/Unix配置环境变量
- tomcat之Session的管理
- WIFI和WLAN的区别是什么
- 第六章:6.2.4 软件包管理 - rpm命令管理 - 校验和文件提取
- UML九种图(五)——组件图、部署图