事件分发
事件分发,不论在面试还是在项目中出现的频率都是很大的,我对事件分发机制原理一直是模棱两可的,所以花了一点时间彻底梳理一下,以备自己遗忘后可以快速的记起。
事件分发流程图
流程图解析
1 处理事件分发有三个层级 Activity 层 viewGroup 层 view 层
2 处理事件有三个方法,dispatchTouchEvent onInterceptTouchEvent
onTouchEvent
3 dispatchTouchEvent 如果是返回的是true,表明在本层进行消费,如果是
false,则表明不消费此事件(不接受,所以其子控件也就不会接收到这个事
件,并进行相应的操作),如果是返回的是true,说明这个层级是消费这个事件
的,这个时候调用的是onIntercepTouchEvent方法,这个方法返回的是true,说
明对这个事件进行拦截,不给自view了,直接调用本层级的onTouchEvent方
法,对事件进行消费,如果是返回的false说明是不拦截这个事件,传递给子
view,会调用子view的dispatchTouchEvent方法,这个方法也会返回一个值,
如果是true,说明我这要消费,这时会调用onTouchEvent的方法,进行事件的
处理。如果是false,表示我也不干,这时候会调用上一层级的onTouchEvent方
法,它也会返回一个值,如果是true,说明这个活我干了,你不用管了。如果是
false就说明,我也不干,接着返回上衣层级的onTouchEvent方法,这里进行着
上述同样的操作。如果都不消费最终会交给activity终止此次事件。