事件分发原理(不包括实战)

事件分发

事件分发,不论在面试还是在项目中出现的频率都是很大的,我对事件分发机制原理一直是模棱两可的,所以花了一点时间彻底梳理一下,以备自己遗忘后可以快速的记起。

事件分发流程图

屏幕快照 2017-09-14 下午1.32.11.png

流程图解析

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终止此次事件。

推荐阅读更多精彩内容