关于Android事件分发机制一些要注意的问题

  有关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是希望大家去亲自操作一下, 改变这三个方法的返回值以后,到底会出现什么现象。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值