您的位置:首页 > 移动开发 > Android开发

关于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是希望大家去亲自操作一下, 改变这三个方法的返回值以后,到底会出现什么现象。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: