https://blog.csdn.net/lmj623565791/article/details/38960443 (Android View 事件分发机制 源码解析 (上) )
https://blog.csdn.net/lmj623565791/article/details/39102591(Android ViewGroup事件分发机制)
View的事件分发机制
dispatchTouchEvent-->setOnTouchListener的onTouch-->onTouchEvent
dispatchTouchEvent重点源码
public boolean dispatchTouchEvent(MotionEvent event) {
if (!onFilterTouchEventForSecurity(event)) {
return false;
}
if (mOnTouchListener != null && (mViewFlags & ENABLED_MASK) == ENABLED &&
mOnTouchListener.onTouch(this, event)) {
return true;
}
return onTouchEvent(event);
}
如果设置了onTouchListener监听并且onTouch执行后返回true,则不会执行onTouchEvent方法
onTouchEvent中检测到MotionEvent.ACTION_UP事件时,会执行performClick()方法(执行onClick方法)
ViewGroup事件分发机制
1-->2-->3-->4
1. ViewGroup的diapatchTouchEvent
2. ViewGroup的onInterceptTouchEvent
-->return true 拦截事件向子View传递
-->return false 不拦截事件,子View可以消费事件
3. View的dispatchTouchEvent
-->return true 子View成功将事件消费掉了
-->return false 子View没有消费掉事件,由ViewGroup自己处理,调用ViewGroup的onTouchEvent方法
4. View的onTouchEvent