美文网首页
Android 事件传递机制

Android 事件传递机制

作者: AKyS佐毅 | 来源:发表于2017-11-23 17:11 被阅读0次
Android事件分发机制.png

事件传递:

  • 1.事件传递机制---源码。
  • 2.处理事件的冲突。

一、View的事件分发。

首先我们看下下边的案例

I/AKyS: OnTouchListener:acton--0----AppCompatButton{dc64049 VFED..C.. ........ 0,0-1080,144 #7f0b005f app:id/button}
I/AKyS: OnTouchListener:acton--1----AppCompatButton{dc64049 VFED..C.. ...P.... 0,0-1080,144 #7f0b005f app:id/button}
I/AKyS: OnClickListener----AppCompatButton{dc64049 VFED..C.. ...P.... 0,0-1080,144 #7f0b005f app:id/button}
  • 结论:
    1.控件的Listener事件触发的顺序是先onTouch,再onClick。
    2.控件的onTouch返回true,将会onClick事件没有了---阻止了事件的传递。
    返回false,才会传递onClick事件(才会传递up事件)

  • 源码依据:


  • 当我们手指按下去时,停止其他的滚动效果。

  • ListenerInfo,持有了View 的所有监听事件。

  • 如果onTouchListener的onTouch方法返回了true,那么view里面的onTouchEvent就不会被调用了。

  • 顺序dispatchTouchEvent-->onTouchListener---return false-->onTouchEvent

  • 如果view为disenable,则:onTouchListener里面不会执行,但是会执行onTouchEvent(event)方法

  • onTouchEvent方法中的ACTION_UP分支中触发onclick事件监听

    • onTouchListener-->onTouch方法返回true,消耗此事件。down,但是up事件是无法到达onClickListener.
    • onTouchListener-->onTouch方法返回false,不会消耗此事件。
  • 使用系统的button.给button添加touch和c lick监听,同时将OnTouch()返回值置为true.



    结果:



    结论: 消耗此事件。down,但是up事件是无法到达onClickListener.
  • onTouchListener-->onTouch方法返回false


结果:



结论: onTouchListener-->onTouch方法返回false,不会消耗此事件。

此时我们将onTouchEvent中返回true.


结果: OnClick方法不执行了


在Activity中将OnTouch()方法置为false.同时在自定义View中将OnTouchEvent()置为true.结果如下:

结果:



结论: OnClick()方法没有执行。

  • 在此基础上,如果在返回true之前,调用 super.onTouchEvent(event);

结果如下:


结论: 没有调用Super, 是无法出发OnClick()方法的。

  • 如果我们在onTouchEvent()方法中返回是false.

结果如下:


结论:当我们返回false 时,不会在派发其他的动作。如果此时是Down事件,相应Down,但不消耗其他事件。交给父容器处理。

  • 当我们该写dispatchTouchEvent()方法,返回true的时候。

结果如下:


结论: Button,调用super.dispatchTouchEvent(event);。默认返回的是true.

  • 当我们该写dispatchTouchEvent()方法,返回false的时候


结果如下:

  • View的事件分发
    - 1.dispatchTouchEvent();
    - 2.onTouchListener-->onTouch方法
    - 3.onTouchEvent()
    - 4.onClickListener-->onClick方法

总结:


相关文章

网友评论

      本文标题:Android 事件传递机制

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