android 事件分发 复习
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 }