Android事件分发机制有三类:Activity、View、ViewGroup,其调用顺序是Activity->ViewGroup->View,考虑到实际开发中Activity的事件分发很少用到,这里便不作赘述。想要了解的可自行百度、谷歌。
下面,我从View的事件分发开始。
View的事件分发
我们知道,任何触摸事件都是从dispatchTouchEvent函数开始。在View的dispatchTouchEvent函数中,会看到这样的代码块:1
2
3
4
5
6
7
8
9
10
11
12
13
14
15...
if (onFilterTouchEventForSecurity(event)) {
//noinspection SimplifiableIfStatement
ListenerInfo li = mListenerInfo;
if (li != null && li.mOnTouchListener != null
&& (mViewFlags & ENABLED_MASK) == ENABLED
&& li.mOnTouchListener.onTouch(this, event)) {
result = true;
}
if (!result && onTouchEvent(event)) {
result = true;
}
}
...
说明View若要进行事件分发,那么会优先分发给onTouch(),若onTouch()返回true,则直接返回true,不会进入到onTouchEvent()中。否则,进入到onTouchEvent()。
more >>