关于android事件分发机制

首先插几个图

 
 

下面是一个总体概括:

  1. 事件由Activity的dispatchTouchEvent()开始,将事件传递给当前的Activity的根ViewGroup:mDecorView,事件自上而下传递,直到被消费。

  2. 事件分发到ViewGroup时,调用dispatchTouchEvent()进行分发处理。首先会被ViewGroup的onInterceptTouchEvent()拦截。如果onInterceptTouchEvent 返回false,则开始遍历ViewGroup中的子View,将事件依次发给子View,若事件被某个子View消费了,将不再继续分发;如果onInterceptTouchEvent返回true,事件由ViewGroup自己处理。ViewGroup通过调用子View中的mOnTouchLisenter事件得到onTouchEvent的返回值。当这个返回值为true时,自己消费;否则将事件回传到Activity中,最后事件结束。

  3. 当事件分发到View层的时候,事件传递到View的dispatchTouchEvent() ,首先会判断OnTouchListener是否存在,倘若存在,则执行onTouch(),若onTouch()未对事件进行消费,事件将继续交由onTouchEvent处理,根据上面分析可知,View的onClick事件是在onTouchEvent的ACTION_UP中触发的,因此,onTouch事件优先于onClick事件。

  4. 事件在自上而下的传递过程中一直没有被消费,而且最底层的子View也没有对其进行消费,事件会反向向上传递,此时,父ViewGroup可以对事件进行消费,若仍然没有被消费的话,最后会回到Activity的onTouchEvent。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值