美文网首页
Android事件分发-View、ViewGroup、Activ

Android事件分发-View、ViewGroup、Activ

作者: 粉色小猫与蓝色小妖 | 来源:发表于2018-12-23 22:01 被阅读3次

以下是我跑的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处理,并且事件将重新提交给它的父元素处理。???

相关文章

网友评论

      本文标题:Android事件分发-View、ViewGroup、Activ

      本文链接:https://www.haomeiwen.com/subject/jadnkqtx.html