应付面试系列之事件分发机制

面试中的问题往往实际开发中用不到,但是还都爱问,所以如何用自己的语言表达出来就非常重要,但是语言逻辑能记住一时,下次面试时又忘了,所以整理出来以免需要时还要重新 整理。如有不对欢迎指正。新司机上路多多关照。

关于事件分发机制的回答,个人理解应从以下几个方面入手,两个主体,三个方法,事件序列,优先级。

Touch事件分发中只有两个主角:ViewGroup和View。ViewGroup包含onInterceptTouchEvent、dispatchTouchEvent、onTouchEvent三个相关事件。View包含dispatchTouchEvent、onTouchEvent两个相关事件。OnTouchEvent 和onInterceptTouchEvent都是在dispatchTouchEvent内部处理的。当dispatchTouchEvent执行时首先判断是否拦截,默认不拦截(onInterceptTouchEvent返回false),会调用子view的dispatechTouchEvent继续向下分发,如过拦截则调用自己的onTouchEvent去考虑是否处理,如果所有子view的onTouchEvent都返回false,则考虑viewgroup的onTouchEvent是否会处理,如果都不处理,会一层一层向外传到activity,由activity去处理。当onTouchEvent返回true时,这个事件被消耗,这里有一个事件序列的问题,包括down,move,up,down事件分发到这个view被消耗指的是down事件被消耗,move,up也直接分发到这里。但不一定消耗。还有一个ontouch方法和onTouchEvent优先级问题,在一些监听(比如onclicklisternner,ontouchlistenner)中会重写ontouch方法,这个方法也可以消耗事件,这个优先级要高于onTouchEvent。

你可能感兴趣的:(应付面试系列之事件分发机制)