android 事件分发 复习

 

 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
}