android 事件分发

本文深入探讨Android中事件分发机制,详细解释了当事件传递到ViewGroup时,如何通过判断是否禁用拦截事件及是否拦截子View事件来决定事件的流向。同时,文章阐述了子View中dispatchTouchEvent的作用及事件消费流程,包括ontouchlistener的判断、ontouch方法的执行逻辑以及click事件的触发条件。最后,文章提到了事件主要通过down事件分发给子View,并确定由哪个View消费此次事件,后续的move和up事件则由该View负责。

记录下对Android事件分发的理解:

如果a作为viewgroup,b作为view,b包含在a中。事件会先传递到viewgroup中,既a。然后a会进行事件分发给子view。事件分发的方法中,会有个判断,是否要分发给子view,disallowintercept(是否禁用拦截事件) 和!onInterceptTouchEvent(ev)(是否拦截对子view的事件,取反),任何一个判断为true,则将事件分发给子view--b。子view中会有dispatchTouchEvent(),这个方法中,如果返回为true,代表消费此次事件。dispatchTouchEvent()中,有判断是否有ontouchlistener,是否可点击,ontouch()方法中是否返回了true,如果返回的是true,会不执行onTouchevent,click事件也在此方法中,设置的click事件也将不会执行。在ontouchevent中,也有判断是否返回true,代表消费事件。viewgroup如果没有分发事件给子view,或者子view没有消费事件,则会向自己的父级一层一层的找,既找到view中dispatchToiuchEvent,然后进行事件的判断。

主要是通过down事件,分发给子view,确定谁消费此次事件,然后后面的move和up事件都有那个view负责。

转载于:https://my.oschina.net/u/2417992/blog/3040754

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值