美文网首页
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