本文章基于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 SimplifiableIfStatement7233 ListenerInfo li = mListenerInfo;//包括onTouch,onClick和onLongClick事件7234 if (li != null && li.mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED7235 && 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 }