android(八)、触摸事件分发
本文章基于android 4.2.1,从view拿到事件信息开始,首先对事件做一些检测及预处理;如果事件有问题的话则抛弃信息,否则的话开始对事件进行分析。
首先判断mListenerInfo是否为空,是否设置了onTouch事件;如果设置了事件则执行onTouch事件,当onTouch方法消耗了事件则消息传递结束;否则将事件交给OnTouchEvent方法处理,onTouchEvent中主要是判断是执行点击事件还是长按事件,如果没有消耗掉事件的话事件抛给父控件或者结束事件(无父控件时结束事件)。
7226 public boolean dispatchTouchEvent(MotionEvent event) {
7227 if (mInputEventConsistencyVerifier != null) {
7228 mInputEventConsistencyVerifier.onTouchEvent(event, 0);
7229 }
7230
7231 if (onFilterTouchEventForSecurity(event)) {
7232 //noinspection SimplifiableIfStatement
7233 ListenerInfo li = mListenerInfo;//包括onTouch,onClick和onLongClick事件
7234 if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED
7235 && li.mOnTouchListener.onTouch(this, event)) {
7236 return true;
7237 }
7238
7239 if (onTouchEvent(event)) {
7240 return true;
7241 }
7242 }
7243
7244 if (mInputEventConsistencyVerifier != null) {
7245 mInputEventConsistencyVerifier.onUnhandledEvent(event, 0);
7246 }
7247 return false;
7248 }