事件传递之一(基本概念)
2015-03-05 22:24
232 查看
Android事件传递机制之一
所谓事件传递是指在Android应用程序开发中,当有多个View叠加在同一个区域内,如果按下View所在的区域,按下的Down、Move,Up事件将如何进行传递的过程。
假设一个ViewGroup里面包含了一个View,当用户按下View时,ViewGroup和View有哪些方法会触发呢。
在了了解这些事件传递之前,我们先来了解一下几个方法的概念:
1. dispatchTouchEvent:此方法只有继承ViewGroup的类才有,是指向childView分发事件的函数,即当手按下了View(或者ViewGroup)的位置,都会通过ViewGroup的dispatchTouchEvent事件,也就是它是所有View事件获取到之前触发,所有childView的事件都是通过dispatchTouchevent分发的。
2. onInterceptTouchEvent:此方法只有继承ViewGroup的类才有,在dipatchTouchEvent分发后,就会被onInterceptTouchEvent所捕获,此方法起到一个拦截事件的作用,
如果此方法return true,则表示不会再继续处理后续的事件。例如当onInterecptTouchEvent的Down的时候返回了true,则事件将不会继续传递给子View的onTouchEvent了,
而是将事件传给当前ViewGroup的onTouchEvent进行处理
3.onTouchEvent:: 此方法不论是ViewGroup,还是View都有此都有,因为不论是ViewGroup还是View都是View的子类,所以onTouchEvent是View的函数。
以下举一个具体的实例来,描述事件传递过程
假设一个LinearLayout里面包含了一个TextView,当用户点击TextView中,事件将是如何传递的(为了描述方便,分别使用L1,T1)
1.默认情况下按如下顺序传递事件
L1的dispatchTouchEvent的Down -> L1的onInterecptTouchEvent的Down ->T1的onTouchEvent的Down,默认情况下都是这个传递顺序
假如 T1的onTouchEvent的Down return false了,则事件到此消失,不再继续传递下去
假如T1的onTouchEvent的Down return true 了, 则事件将会被传递到L1的onTouchEvent中,于是事件便有了如下流程
L1的dispatchTouchEvent的Down -> L1的onInterecptTouchEvent的Down ->T1的onTouchEvent的Down ->L1的onTouchEvent的Down
2.于是我们可以得出如下结论
如果child view的onTouchEvent返回true,则Down事件将不再继续往下传递,如果child view的onTouchEvent返回的是false,则Down继续传递给childview 的parent的onTouchEvent
Up事件不会走Down事件的onTouchEvent传递过程,谁处理了OnTouchEvent的Down事件并且返回了true(则事件不再继续传递下去),谁就处理Up事件,所以如果Down事件传递到了最顶级的Parentview,而最顶级的Parent view的onTouchEvent返回了false,则程序将丢失Up事件。
所谓事件传递是指在Android应用程序开发中,当有多个View叠加在同一个区域内,如果按下View所在的区域,按下的Down、Move,Up事件将如何进行传递的过程。
假设一个ViewGroup里面包含了一个View,当用户按下View时,ViewGroup和View有哪些方法会触发呢。
在了了解这些事件传递之前,我们先来了解一下几个方法的概念:
1. dispatchTouchEvent:此方法只有继承ViewGroup的类才有,是指向childView分发事件的函数,即当手按下了View(或者ViewGroup)的位置,都会通过ViewGroup的dispatchTouchEvent事件,也就是它是所有View事件获取到之前触发,所有childView的事件都是通过dispatchTouchevent分发的。
2. onInterceptTouchEvent:此方法只有继承ViewGroup的类才有,在dipatchTouchEvent分发后,就会被onInterceptTouchEvent所捕获,此方法起到一个拦截事件的作用,
如果此方法return true,则表示不会再继续处理后续的事件。例如当onInterecptTouchEvent的Down的时候返回了true,则事件将不会继续传递给子View的onTouchEvent了,
而是将事件传给当前ViewGroup的onTouchEvent进行处理
3.onTouchEvent:: 此方法不论是ViewGroup,还是View都有此都有,因为不论是ViewGroup还是View都是View的子类,所以onTouchEvent是View的函数。
以下举一个具体的实例来,描述事件传递过程
假设一个LinearLayout里面包含了一个TextView,当用户点击TextView中,事件将是如何传递的(为了描述方便,分别使用L1,T1)
1.默认情况下按如下顺序传递事件
L1的dispatchTouchEvent的Down -> L1的onInterecptTouchEvent的Down ->T1的onTouchEvent的Down,默认情况下都是这个传递顺序
假如 T1的onTouchEvent的Down return false了,则事件到此消失,不再继续传递下去
假如T1的onTouchEvent的Down return true 了, 则事件将会被传递到L1的onTouchEvent中,于是事件便有了如下流程
L1的dispatchTouchEvent的Down -> L1的onInterecptTouchEvent的Down ->T1的onTouchEvent的Down ->L1的onTouchEvent的Down
2.于是我们可以得出如下结论
如果child view的onTouchEvent返回true,则Down事件将不再继续往下传递,如果child view的onTouchEvent返回的是false,则Down继续传递给childview 的parent的onTouchEvent
Up事件不会走Down事件的onTouchEvent传递过程,谁处理了OnTouchEvent的Down事件并且返回了true(则事件不再继续传递下去),谁就处理Up事件,所以如果Down事件传递到了最顶级的Parentview,而最顶级的Parent view的onTouchEvent返回了false,则程序将丢失Up事件。
相关文章推荐
- Flex基本概念及其事件机制
- [MPI] MPI 消息传递通信的基本概念
- C#学习基本概念之事件(四)---ElapsedEventHandler委托
- 样本空间,随机事件基本概念 (概统1)
- 二维数组的定义(动态初始化、静态初始化)、初始化格式及其操作、java中的参数传递方式,面向对象的基本概念
- 基本概念:消息传递
- C#学习基本概念之事件(四)---EventHandler委托(事件处理)
- C#学习基本概念之事件(三)---发布符合.NET Framework准则的事件
- JQuery基本概念,语法,选择器,事件
- Qt事件系统基本概念
- C#学习基本概念之类与结构--向方法传递结构与类引用之间的区别
- C#学习基本概念之传递引用类型参数(二)
- [AngularJS面面观] 9. scope事件机制 - 基本概念以及生命周期
- Ext JS 基本概念 - 事件与手势
- C#学习基本概念之事件(五)---EventArgs
- 事件的基本概念
- JQuery事件基本概念
- 01概率论与数理统计之基本概念(随机实验、样本空间、随机事件、事件运算:和、积、差、补;事件的关系:包含、互斥、对立)及概率
- SQL Server 扩展事件(Extented Events)从入门到进阶(4)——扩展事件引擎——基本概念
- Augular4 第三章(上) 路由基本概念,路由的配置,路由的参数传递