关于Android事件分发机制一些要注意的问题
2017-02-24 16:53
232 查看
有关android的事件分发机制,不再强调其重要性,本篇文章也不会去分析其基本流程,只是提出几个比较重要的知识点,在小编看来,android 事件分发机制,事件处理机制,是Activity ViewGroup View 对用户事件的一种传递与处理。这里分析三个问题:1.在android中那些元素具备事件分发处理的能力? 2.dispatchTouchEvent ( ) 返回 true 或者 false的结果是怎样的?3.onTouch 与 onTouchEvenet 有什么区别? 如果大家对这三个问题了然于胸的话,这篇文章可以省略掉了。
第一个问题:在android中那些元素具备事件分发处理的能力?
android系统中拥有时间传递处理能力的类有以下三种:
Activity 中 dispatch onTouchEvent
ViewGroup 中 dispatch onIntercept onTouchEvent (LinearLayout Realativate .....)
view中 dispatch onTouchEvent(你的自定义View or TextView......)
第二个问题:dipatchonTouchEvent( )中的返回值?
返回super.dispatchTouchEvent( )表示继续分发该事件
返回true表示事件 被当前视图消费掉 ,不做处理,不再向下传递,也不会上抛给父视图,
如果dispatchTouchEvent 方法返回了true 事件不会在走 onIntercertTouchEvent( )-->onTouchEvent( )(事件处理与事件消费不是一个概念)
返回false: 事件不会在继续向下传递,会将事件向上抛给父布局,不调用本身的onTouchEvent 直接调用父视图的onTouchEvent( )去处理。
onIntercertTouchEvent
返回true 表示拦截这个事件 交给自身的onTouchEvent 继续分发
返回fasle或者super.onInterceptTouchEvent 表示不对事件进行拦截 继续将事件传递给子视图
onTouchEvent
返回true 表示当前视图可以处理事件 事件不会继续传递给父视图的onTouchEvent
返回super( ) 事件将会向上抛给父视图来处理
返回false 事件将会向上抛给父视图来处理
第三个问题:onTouch 与 onTouchEvent 有什么区别?
Activity中可以复写出dipatchonTouchEvent( ) onTouchEvent( )方法 若Activity 实现了onTouchListener接口
其中onTouchListener 的优先级会高于 onTouchEvent,这句话的意思是说如果你的控件setOnTouchListener的话,会先走onTouch()方法,然后才会走View中的onTouchEvent(),如果onTouch( ) 若返回true ,onTouchEvent 和 onClick 都不会被触发,另外如果在onTouchEvent中处理了事件并且返回true 那么onClick 也不会被触发,意思就是onClick
也就是点击事件的回掉方法级别是最低的。
希望看到这里的各位,写一个小DEMO ,加几句Log,去亲自实践一下,这样大家才会理解的更加深刻。没有贴出自己的Log是希望大家去亲自操作一下, 改变这三个方法的返回值以后,到底会出现什么现象。
第一个问题:在android中那些元素具备事件分发处理的能力?
android系统中拥有时间传递处理能力的类有以下三种:
Activity 中 dispatch onTouchEvent
ViewGroup 中 dispatch onIntercept onTouchEvent (LinearLayout Realativate .....)
view中 dispatch onTouchEvent(你的自定义View or TextView......)
第二个问题:dipatchonTouchEvent( )中的返回值?
返回super.dispatchTouchEvent( )表示继续分发该事件
返回true表示事件 被当前视图消费掉 ,不做处理,不再向下传递,也不会上抛给父视图,
如果dispatchTouchEvent 方法返回了true 事件不会在走 onIntercertTouchEvent( )-->onTouchEvent( )(事件处理与事件消费不是一个概念)
返回false: 事件不会在继续向下传递,会将事件向上抛给父布局,不调用本身的onTouchEvent 直接调用父视图的onTouchEvent( )去处理。
onIntercertTouchEvent
返回true 表示拦截这个事件 交给自身的onTouchEvent 继续分发
返回fasle或者super.onInterceptTouchEvent 表示不对事件进行拦截 继续将事件传递给子视图
onTouchEvent
返回true 表示当前视图可以处理事件 事件不会继续传递给父视图的onTouchEvent
返回super( ) 事件将会向上抛给父视图来处理
返回false 事件将会向上抛给父视图来处理
第三个问题:onTouch 与 onTouchEvent 有什么区别?
Activity中可以复写出dipatchonTouchEvent( ) onTouchEvent( )方法 若Activity 实现了onTouchListener接口
其中onTouchListener 的优先级会高于 onTouchEvent,这句话的意思是说如果你的控件setOnTouchListener的话,会先走onTouch()方法,然后才会走View中的onTouchEvent(),如果onTouch( ) 若返回true ,onTouchEvent 和 onClick 都不会被触发,另外如果在onTouchEvent中处理了事件并且返回true 那么onClick 也不会被触发,意思就是onClick
也就是点击事件的回掉方法级别是最低的。
希望看到这里的各位,写一个小DEMO ,加几句Log,去亲自实践一下,这样大家才会理解的更加深刻。没有贴出自己的Log是希望大家去亲自操作一下, 改变这三个方法的返回值以后,到底会出现什么现象。
相关文章推荐
- 【Android View事件分发机制】关于拦截事件的注意点
- android-----关于事件分发机制中几点困惑测试
- 关于Android的Touch事件的分发机制
- 关于android 的事件分发机制
- Android开发中的事件分发和消费机制的一些理解
- Android事件分发机制及问题解答
- 关于android中的事件分发机制,点击事件分发机制详解
- Android事件分发机制和一些疑问
- 关于android事件分发机制
- 关于Android的事件分发机制
- 关于android事件分发机制
- Android中Touch事件分发机制-关于dispatchTouchEvent等方法的研究
- 关于Android事件分发机制的理解
- 关于Android中的事件分发、拦截和相应的消费问题
- Android_事件的分发与处理机制及解决事件冲突问题
- 关于Android 事件分发机制的学习
- Android 一行代码解决菜单隐藏问题,又扔给你事件分发机制
- Android 源码解析 图解 Android 事件分发机制
- Android滑动冲突与事件分发机制浅析
- Android Touch事件的分发机制