boolean dispatchTouchEvent(MotionEvent event) {
int action = event.getAction();
//判断ViewGroup是否拦截touch事件。当为ACTION_DOWN或者找到能够接收touch事件的子View
时,由onInterceptTouchEvent(event)决定是否拦截。其他情况,即ACTION_MOVE/ACTION_UP且
没找到能够接收touch事件的子View时,直接拦截。
boolean intercepted;
if (action == MotionEvent.ACTION_DOWN || mFirstTouchTarget != null) {
intercepted = onInterceptTouchEvent(event);
} else {
intercepted = true;
}
//如果ViewGroup不拦截touch事件。在ACTION_DOWN时遍历所有子View,查找能够接收touch事件的
子View。如果找到则设置mFirstTouchTarget,并跳出循环。
boolean alreadyDispatchedToNewTouchTarget = false;
if (!intercepted) {
if (action == MotionEvent.ACTION_DOWN) {
for (int i = childrenCount - 1; i >= 0; i--) {
if (!canViewReceivePointerEvents(child) ||
!isTransformedTouchPointInView(x, y, child, null)) {
continue;
}
if (dispatchTransformedTouchEvent(event, child)) {
//找到mFirstTouchTarget
newTouchTarget = addTouchTarget(child);
alreadyDispatchedToNewTouchTarget = true;
break;
}
}
}
}
//事件下发及消费。如果没找到能够接收touch事件的子View,则由ViewGroup自己处理及消费。
如果找到能够接收touch事件的子View,则由子View递归处理touch事件及消费。
boolean handled = false;
if (mFirstTouchTarget == null) {
handled = dispatchTransformedTouchEvent(event, null);
} else {
if (alreadyDispatchedToNewTouchTarget) {
handled = true;
} else {
while (touchTarget) {
handled = dispatchTransformedTouchEvent(event, child);
}
}
}
return handled;
}
//ViewGroup事件下发。如果无接收touch事件的子View,则由ViewGroup的父类(即View)下发touch事件
如果child非空,则交由子View下发touch事件,子View可以是ViewGroup或View。
boolean dispatchTransformedTouchEvent(MotionEvent event, View child) {
boolean handled;
if (child == null) {
handled = super.dispatchTouchEvent(event);
} else {
handled = child.dispatchTouchEvent(event);
}
return handled;
}
//View的Touch事件分发。当外部设置了mOnTouchListener时,先交由mOnTouchListener.onTouch(event)消费。
若未消费,则交给View的onTouchEvent(event)消费。onTouchEvent的实现是,如果设置了mOnClickListener,
则执行mOnClickListener.onClick()点击事件。返回值为true,表示消费,否则未消费。
boolean dispatchTouchEvent(MotionEvent event) {
boolean result = false;
if (mOnTouchListener != null && mOnTouchListener.onTouch(this, event)) {
result = true;
}
if (!result && onTouchEvent(event)) {
result = true;
}
return result;
}
boolean onTouchEvent(MotionEvent event) {
performClick();
}
机械节能产品生产企业官网模板...
大气智能家居家具装修装饰类企业通用网站模板...
礼品公司网站模板
宽屏简约大气婚纱摄影影楼模板...
蓝白WAP手机综合医院类整站源码(独立后台)...苏ICP备2024110244号-2 苏公网安备32050702011978号 增值电信业务经营许可证编号:苏B2-20251499 | Copyright 2018 - 2025 源码网商城 (www.ymwmall.com) 版权所有