美文网首页
Android事件分发机制--->ACTION_UP事件

Android事件分发机制--->ACTION_UP事件

作者: 谢尔顿 | 来源:发表于2018-07-23 16:23 被阅读204次

    引言

    在文章一步步探索学习Android Touch事件分发传递机制(二)中我们可以练习到ACTION_UP事件的事件分发传递流程是怎样的,因为UP事件发生前肯定有DOWN事件,所以UP事件的分发流程肯定与DOWN事件在哪被消费是紧密相关的。可以继续用上一篇文章Android事件分发机制--->DOWN事件中的demo为例子,打印log,来探索UP事件的分发流程。

    1. 布局&代码

    Android事件分发机制--->DOWN事件中用到的一样。

    2. 打印log

    (1) 所有方法返回super的情况

    • log


    • 对应的流程图


      所有方法返回super

    总结:ACTION_UP事件并没有和ACTION_DOWN事件一样类似U型的结构在View树传递,而是直接在Activity的onTouchEvent方法中消费掉了。

    (2) ViewGroup2的dispatchTouchEvent()返回true的情况

    • log


      dispatchTouchEvent()返回true
    • 对应的流程图


      dispatchTouchEvent()返回true

    总结:当ACTION_DOWN事件在某一个View或者ViewGroup的dispatchTouchEvent()方法中被消费调的情况下,对应的ACTION_UP事件也会在次被消费掉,终止传递。

    (3) ViewGroup2的onInterceptTouchEvent()和onTouchEvent都返回true的情况

    • log


    • 对应的流程图


      onInterceptTouchEvent()和onTouchEvent都返回true

    总结:当ACTION_DOWN事件在某一个View或者ViewGroup的onTouchEvent方法中被消费掉的情况下,对应的ACTION_UP事件也会再次被消费掉,终止传递。(需要注意的是,ACTION_UP事件是不会再经过拦截器onInterceptTouchEvent()方法了的)

    (3) ViewGroup2的onTouchEvent返回true的情况

    • log


      ViewGroup2的onTouchEvent返回true
    • 对应的流程图


      ViewGroup2的onTouchEvent返回true的情况

    总结:可以从Log看出来,当ACTION_DOWN事件被某控件的onTouchEvent方法消费掉,则其对应的ACTION_UP事件只传递到该控件。也就是不会传递到比此空间更深层的控件中去。

    3.最后总结

    • ACTION_MOVE事件与ACTION_UP事件遵循类似的规律,上面只以ACTION_UP为例子分析。
    • ACTION_MOVE事件与ACTION_UP事件的传递分发与其对应之前的ACTION_DOWN事件有紧密联系。
    • 当ACTION_DOWN事件在dispatchTouchEvent方法中被消费,则对应的ACTION_MOVE事件与ACTION_UP事件也会从上而下传递到该控件的该方法处被消费掉。
    • 当ACTION_DOWN事件在onTouchEvent方法中被消费,则对应的ACTION_MOVE事件和ACTION_UP事件只传递到该控件的onTouchEvent方法中然后被消费而终止传递,不会经历该控件之下的控件的传递过程。
    • 当所有方法都默认return super,则ACTION_MOVE事件与ACTION_UP事件会在Activity的onTouchEvent()中被消费掉。

    值得学习的文章:

    相关文章

      网友评论

          本文标题:Android事件分发机制--->ACTION_UP事件

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