decorview的dispatch事件发给acvitity,activity回到到decorview中,
viewgroup
1.
requestDisallowInterceptTouchEvent 设置mGroupFlags&FLAG_DISALLOW_INTERCEPT的值
2.
private TouchTarget mFirstTouchTarget;
dispatchTouchEvent{
if(action_down){
清除mGroupFlags状态
}
if(action_down || mFirstTouchTarget == null){
final boolean disallowIntercept = (mGroupFlags & FLAG_DISALLOW_INTERCEPT) != 0)
if (!disallowIntercept) {
intercepted = onInterceptTouchEvent(ev);
}
}
if(! intercepted && actionMasked == MotionEvent.ACTION_DOWN){
for (int i = childrenCount - 1; i >= 0; i--) {
if( child.dispatchTouchEvent(event)){
mFirstTouchTarget = TouchTarget.obtain(child);
break
}
}
if(mFirstTouchTarget != null){
handled = mFirstTouchTarget.child.dispatchTouchEvent;
}else{
handled = super.dispatchTouchEvent;
}
if(actionMasked == MotionEvent.ACTION_UP){
mFirstTouchTarget = null;
}
return handle;
}
view :
boolean dispatchTouchEvent{
if(mOnTouchListener.onTouch)
return true;
}
if( onTouchEvent(event)){
return true
}
return false;
}
boolean onTouchEvent{
if (mTouchDelegate != null) {
if (mTouchDelegate.onTouchEvent(event)) {
return true;
}
}
if(mOnClickListener.onClick){
return true;
}
if(clickable){
return true
}
return false }