Layout和ListView Touch事件分发


伪代码解释原理:

    Layout

=======================================================================================
    public boolean dispatchTouchEvent(MotionEvent ev) {
        ...
        boolean intercepted = onInterceptTouchEvent(ev);
        ...
        boolean handled = dispatchTransformedTouchEvent(ev, child);
        ...
        return handled;
    }


    private boolean dispatchTransformedTouchEvent(MotionEvent event, View child) {
        ...
        boolean handled;
        ...
        if (child == null) {
            handled = super.dispatchTouchEvent(event);
        } else {
            handled = child.dispatchTouchEvent(event);------------------------>ListView
        }
        ...
        return handled;
    }




   ListView
======================================================================================
   public boolean dispatchTouchEvent(MotionEvent ev) {
       ...
       boolean intercepted = onInterceptTouchEvent(ev);
       ...
       return handled;
   }


   private boolean dispatchTransformedTouchEvent(MotionEvent event, View child) {
       ...
       boolean handled;
       ...
       if (child == null) {
           handled = super.dispatchTouchEvent(event);--------------------------->View
       } else {
           handled = child.dispatchTouchEvent(event);
       }
       ...
       return handled;
   }




    View
=====================================================================================
    public boolean dispatchTouchEvent(MotionEvent event) {
        ...
        boolean result = onTouchEvent(event);
        ...
        return result;

    }


ACTION_DOWN事件,分发过程:

I/Snake: Layout-Patch-Dowm


I/Snake: Layout-Inter-Dowm
I/Snake: Layout-Inter:false


I/Snake: ListView-Patch-Dowm


I/Snake: ListView-Inter-Dowm
I/Snake: ListView-Inter:false


I/Snake: ListView-Touch-Dowm
I/Snake: ListView-Touch:true


I/Snake: ListView-Patch:true


I/Snake: Layout-Patch:true


你可能感兴趣的:(ANDROID)