先通俗的理解事件这个概念,以触摸屏幕为例,当手指碰到屏幕的时候,手机通过软硬件联合工作,逐一排查基本确定手指碰到了哪个位置,这个位置上的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()做了什么工作呢,最开始的时候已阐述。