activity.dispatchTouchEvent --- ViewGroup.dispatchTouchEvent ---- View.dispatchTouchEvent --- View.ontouchEvent ---- ViewGroup.onTouchEvent ----- activity.onTouchEvent
=========================================== ViewGroup.dispatchTouchEvent =====================
先判断onInterceptTouchEvent,如果true则拦截,viewGroup自己消费此事件,不再分发到子view,到自身的onTouchEvent中。
否则循环子view,判断点击事件坐标是否在子view区域中,如果是,则调用子view的dispatchTouchEvent。
当循环结束,并没有任何子view返回true消费此事件,会调用super.dispatchTouchEvent,此时,viewGroup的父类是view,
自然到了view的dispatchTouchEvent了,这个类型的逻辑执行见下面的内容。注意的是,正是这一点,解释了当没有任何view消费
触摸事件的时候,触摸事件会一层一层返回去直到回到activity.onTouchEvent这个现象了。
========================================== View.dispatchTouchEvent ==========================
先判断是否设置了onTouchListener,如果有先调用TouchListener,如果touchListener返回false,继续执行view本身的onTouchEvent
========================================== View.onTouchEvent==========================
先调用TouchDelegate,如果TouchDelegate未消费,则判断view是否clickable或longClickable,如果是返回true消费此事件,否则返回false。