android 事件分发。

先通俗的理解事件这个概念,以触摸屏幕为例,当手指碰到屏幕的时候,手机通过软硬件联合工作,逐一排查基本确定手指碰到了哪个位置,这个位置上的ViewGroup和View到底是哪一个,然后事件分发和消费就展开了。  

首先,从简单的无子view的view的事件触发开始,点击一个Button。通过分析源码,他的过过程是这样。



Button得知被点击了,首先会调用自己的dispathTouchEvent()方法,他先判断是否绑定了onTouchListener事件

(1)如果绑定了就去执行OntuchListener中的touch()方法。当然touch方法是有返回值的,如果返回值如true,则执行view的OntuchEvent方法,如果返回fals则结束。

(2)如果没绑定则直接去执行view的OntuchEvent方法。

Event方法,接受到传来的事件之后会做处理。如果这事件的动作是按下在做什么处理,是滑动做什么处理,是抬起做什么处理是取消做什么处理,这里着重说下在抬起时的处理,抬起时会判断是否绑定了点击onclickListener事件。

(1)如果绑定了就执行onClickListener的OnClick()方法

(2)如果没有就算了。

最后,无论如何,OntuchEvent()方法返回true。

以上是,view对事件分发和消费。


ViewGroup对事件的分发和消费,viewGroup里包含一个Button为例。上图~


viewGroup接受到事件后先交给自身的onInterceptTouchEvent()方法,他做的工作就是要不要把事件拦截下来

(1)如果拦截下来就交给他自身的dispathTouchEvent()

(2)如果不拦截就交给他所包含的且被触发的view的dispathTouchEvent()方法处理。

duspathTouchEvent()做了什么工作呢,最开始的时候已阐述。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值