Android 事件分发机制

前言:在重新整理知识点时点开了以前关注的一位大神的两篇博客,在这里记录一下要点。以下是两篇原文地址:

 Android事件分发机制完全解析,带你从源码的角度彻底理解(上)
 Android事件分发机制完全解析,带你从源码的角度彻底理解(下)


正文:上面的两篇博文分别讲View的事件分发机制与ViewGroup的事件分发机制。事件分发都是从当前Activity开始,由最父层的布局一直分发到当前触发的组件,也就是层级传递,这期间默认如果有谁消费了事件,则不再继续分发(除非重写了事件传递的返回值),如果到当前触发事件的这个组件也没有消费该事件,则又一层层往回走,直到最父层,这期间如果也没有谁消费事件,则事件消失。

一、View的事件分发机制
1、onTouch 与 onTouchEvent都是在dispatchTouchEvent方法中调用的,当被点击的组件是可enable,且注册了点击或触摸事件,则会调用onTouch。且默认调用了onTouch就不会再继续调用onTouchEvent方法。
2、onclick方法是在onTouchEvent中调用的(performClick),但当被点击的组件是可clickable时才会被调用,否则onTouchEvent中在条件判断时会直接返回false,也就是说在默认情况下当组件没有注册touch监听时,该事件不会被此View消费。

二、ViewGroup的事件分发机制
1、ViewGroup可以通过onInterceptTouchEvent方法来拦截事件,如果该事件被拦截,则不会继续往下分发,该方法默认返回false,即不拦截用户事件。
2、基于View的事件分发机制(组件最终消费事件都是通过继承了view的dispatchTouchEent执行的),如果子View消费了用户事件,则事件不会再分发下去,否则会继续分发,直至被消费。
3、如果所有子View都没有消费该事件,则又会一层一层返回,如果父组件也没有消费该事件,事件消失。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值