美文网首页Android自定义View
dispatchTouchEvent事件分发浅析(五)消费

dispatchTouchEvent事件分发浅析(五)消费

作者: dodo_lihao | 来源:发表于2016-08-24 16:20 被阅读142次

    上一篇,我们大体理解了Intercept拦截
    而之前 也了解了 分发的过程,
    和简单点击,分析了执行顺序

    具体代码可以见https://github.com/2954722256/demo_event

    这篇简单理解下 消费(本篇应该不难,主要是理解)


    回顾

    前面,我们有说过,
    如果我们点击一个View,会dispatchTouchEvent到对应的View
    这个时候,就消费掉了, 不会回传
    如果我们点击一个ViewGroup,会dispatchTouchEvent到对应的ViewGroup
    这个时候,不会被消费,会回传

    那么,会不会有点击一个 ViewGroup的时候,不回传的时候呢?
    也就在ViewGroup消费呢?

    我们试试


    代码

    还是之前拦截的代码


    给ViewGroup添加点击事件

    Paste_Image.png

    点击 自定义的EventButton
    可以发现对应的过程

    MainActivity    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    EventViewGroup  ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    LL setOnTouchListener  onTouch  ---->   ACTION_DOWN ---->   noMsg
    EventViewGroup  ----    onTouchEvent    ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    LL setOnClickListener  onClick  ---->   nullEvent   ---->   noMsg
    
    Paste_Image.png

    我们可以发现,此时ViewGroup也没有回传
    对应的点击执行顺序 和 View 类似, 到对应的Touch之后, 到最后的 onClick, 都没有回传了


    给ViewGroup添中的ViewGroup添加点击事件

    Paste_Image.png

    点击 自定义的TouchEventChilds
    可以发现对应的过程

    MainActivity    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    childs setOnTouchListener  onTouch  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    onTouchEvent    ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    childs setOnClickListener  onClick  ---->   nullEvent   ---->   noMsg
    
    Paste_Image.png

    我们可以发现 和前面差不多
    对应的点击执行顺序 和 View 类似, 到对应的Touch之后, 到最后的 onClick, 都没有回传了


    ViewGroup添加点击事件,但点击里面的Button

    Paste_Image.png

    点击 自定义的TouchEventChild2的Button
    可以发现对应的过程

    MainActivity    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds2   ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds2   ----    onTouchEvent    ---->   ACTION_DOWN ---->   noMsg
    
    Paste_Image.png

    我们可以发现 和前面差不多
    对应的点击执行顺序 和 View 类似, 到对应的Touch之后, 都没有回传了
    但是没有执行ViewGroup的TouchEvent和ClickListener等操作


    简单小结

    大体可以发现
    · 我们点击是先通过 dispatchTouchEvent 传到点击的控件后, 再回传判断 Touch或者Click操作的。
    如果回传的过程中,有多个可以消费的地方, 在离回传最近的地方进行消费
    后面的控件获得不到监听


    添加 onInterceptTouchEvent拦截

    这个时候, 如果我们在Child上面,添加拦截
    再点击Child2


    Paste_Image.png
    MainActivity    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventFather    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    dispatchTouchEvent  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    onInterceptTouchEvent   ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    childs setOnTouchListener  onTouch  ---->   ACTION_DOWN ---->   noMsg
    TouchEventChilds    ----    onTouchEvent    ---->   ACTION_DOWN ---->   noMsg
    MainActivity    ----    childs setOnClickListener  onClick  ---->   nullEvent   ---->   noMsg
    
    Paste_Image.png

    我们可以发现,被拦截以后,就不会继续向下 dispatchTouchEvent了,
    这时候,Child的消费是最近的,所以会响应Child对应的Touch和Click相关的事件


    下一篇我们可以了解dispatchTouchEvent事件分发浅析(六)MOVE/UP

    相关文章

      网友评论

        本文标题:dispatchTouchEvent事件分发浅析(五)消费

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