Android事件分发
Posted dfqin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android事件分发相关的知识,希望对你有一定的参考价值。
1. 当手触摸屏幕,会产生一个事件,此事件由PhoneWindow的DecorView处理,它首先会调用当前Activity的dispatchTouchEvent,如果Activity不处理,事件会交由 DecorView去派发给子view去处理,如果子view不处理,则会调用activity的onTouchEvent事件。
2. 当事件被交给ViewGroup处理时,会调用dispatchTouchEvent()方法,它首先调用onInterceptTouchEvent()看当前ViewGroup是否要拦截掉此事件,如果返回true表示要拦截,事件不再传递下去,直接调用当前ViewGroup的onTouchEvent,由当前ViewGroup处理。如果不拦截的话事件继续向下传递给子view去处理。
3. 当事件被传递到View,也会调用dispatchTouchEvent()方法,因为View没有子View可以派发了,所以会调用它的onTouchEvent()方法,如果返回true表示当前View处理此事件,否则表示不处理,交由父容器处理。
整理思路伪代码如下:
public boolean dispatchTouchEvent(MotionEvent ev)
boolean consume = false;
if (onInterceptTouchEvent(ev) //拦截事件,由当前容器处理
consume = onTouchEvent(ev);
else
consume = child.dispatchTouchEvent(ev); //交给孩子去处理
if (!consume)
consume = onTouchEvent(ev); //孩子不处理,自己处理
return consume;
以上是关于Android事件分发的主要内容,如果未能解决你的问题,请参考以下文章
Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 五 )
Android 事件分发事件分发源码分析 ( ViewGroup 事件传递机制 三 )