以下是我跑的Demo的log:Activity、ViewGroup、View没有做任何处理,return super的情况。’
1.ViewGroup没有包含child view, 没有move操作
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_UP
Activity#########onTouchEvent(), MotionEvent = ACTION_UP
2.ViewGroup没有包含child view, 有move操作
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_UP
Activity#########onTouchEvent(), MotionEvent = ACTION_UP
3.ViewGroup包含child view的情况,没有move 操作
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$$$$$ dispatchTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$ onTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_UP
Activity#########onTouchEvent(), MotionEvent = ACTION_UP
4.ViewGroup包含child view的情况,有move 操作
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$$$$$ dispatchTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$ onTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_UP
Activity#########onTouchEvent(), MotionEvent = ACTION_UP
发现了没,如果只是return super, ViewGroup和View都没有分发到ACTION_UP、ACTION_MOVE。
我把ViewGroup的child view 的onTouchEvent 改成return true。
这是事件传递的log:
1.View的onTouchEvent return true
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_DOWN
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$$$$$ dispatchTouchEvent(), MotionEvent = ACTION_DOWN
View $$$$$$$$$ onTouchEvent(), MotionEvent = ACTION_DOWN
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_MOVE
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_MOVE
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_MOVE
View $$$$$$$$$$$$$ dispatchTouchEvent(), MotionEvent = ACTION_MOVE
View $$$$$$$$$ onTouchEvent(), MotionEvent = ACTION_MOVE
Activity#########dispatchTouchEvent(), MotionEvent = ACTION_UP
ViewGroup-------dispatchTouchEvent(), MotionEvent = ACTION_UP
ViewGroup-------onInterceptTouchEvent(), MotionEvent = ACTION_UP
View $$$$$$$$$$$$$ dispatchTouchEvent(), MotionEvent = ACTION_UP
View $$$$$$$$$ onTouchEvent(), MotionEvent = ACTION_UP
ViewGroup 和 View都接收到了ACTION_MOVE 和 ACTION_UP事件。当然Activity 和ViewGroup再接收不到onTouchEvent(),因为被View给消费掉了。
如果某一个View开始处理事件,如果他不消耗ACTION_DOWN事件(也就是onTouchEvent返回false),则同一事件序列比如接下来进行ACTION_MOVE、ACTION_UP,则不会再交给该View处理,并且事件将重新提交给它的父元素处理。???








网友评论