android事件分发 通俗易懂

1.2 事件分发的本质

答:将点击事件(MotionEvent)传递到某个具体的View & 处理的整个过程

1.3 事件在哪些对象之间进行传递?

答:Activity、ViewGroup、View

1.4 事件分发的顺序

即 事件传递的顺序:Activity -> ViewGroup -> View

1.从上可知,要想充分理解Android分发机制,本质上是要理解:

  • Activity对点击事件的分发机制

  • ViewGroup对点击事件的分发机制

  • View对点击事件的分发机制

1.5 事件分发过程由哪些方法协作完成?

答:dispatchTouchEvent() 、onInterceptTouchEvent()和onTouchEvent()

完整图如下

android事件分发 通俗易懂_第1张图片
966283-b9cb65aceea9219b.png
  • 对于Activity中 dispatchTouchEvent return false将停止向ViewGroup传递,onTouchEvent,return true是终结事件传递,自己消费。

  • ViewGroup 的拦截器onInterceptTouchEvent 默认是不拦截的,所以return super.onInterceptTouchEvent()=return false;ViewGroup 想把自己分发给自己的onTouchEvent,需要拦截器onInterceptTouchEvent方法return true 把事件拦截下来。

  • View 没有拦截器,为了让View可以把事件分发给自己的onTouchEvent,View的dispatchTouchEvent默认实现(super)就是把事件分发给自己的onTouchEvent。

onTouch()和onTouchEvent()的区别

该2个方法都是在View.dispatchTouchEvent()中调用

但onTouch()优先于onTouchEvent执行;若手动复写在onTouch()中返回true(即 将事件消费掉),将不会再执行onTouchEvent()

你可能感兴趣的:(android事件分发 通俗易懂)