Android 事件分发

Android基础

  • 4大组件
  • View事件分发
  • View的绘制流程
  • 线程之间的通信
    个人认为以上是Android 4大知识点,是Android初级工程师进阶中级工程师必备知识点。
    今天来讲下个人对这4大知识点之中的 View的事件分发认识。

首先来看一张图,来自Kelin 图解 Android 事件分发机制,觉得写得非常不错,大家可以去看下。

事件分发详细图解

图中把事件分发描绘的非常详细,仔细认真看多几次,可以加深印象。
上图认为 dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent的返回值有三个,return true;return falsereturn super.xxx()

1、View 和 ViewGroup 的区别

View事件分发相关方法:

  • dispatchTouchEvent 分发
  • onTouchEvent 处理触摸

ViewGroup事件分发相关方法:

  • dispatchTouchEvent 分发
  • onInterceptTouchEvent 拦截
  • onTouchEvent 处理触摸

可以看出ViewGroup比View多出了个Intercept拦截的方法,如果ViewGroup要处理消耗触摸事件,就要通过拦截来把事件给指派给自己。

2、dispatchTouchEvent

  • ViewGroup
    ViewGroup 的 dispatchTouchEvent 方法
    return true;return false 都会消耗该事件。不同的是 return true; 表示事件是自己消耗了, return false 表示自己不传递事件,把事件往上回归。
    return super.dispatchTouchEvent() 会先调用onInterceptTouchEvent看自己是否需要消耗该事件,如果不需要则把事件传递给子View了,如果super.dispatchTouchEvent() 返回true表示里面的子View消耗了事件,返回false表示没有消耗。
  • View
    VIew 的 dispatchTouchEvent 方法
    return true; 消耗该事件,事件往上回归,
    return false 事件往上回归。
    return super.dispatchTouchEvent() 事件传递给 onTouchEvent()

3、onIntercepTouchEvent

该方法只有ViewGroup有,在ViewGroup中调用父类 dispatchTouchEvent() 会去查看是否需要拦截事件。
return true表明自己要消耗该事件。
return false表明自己不需要该事件,事件继续传递。

4、onTouchEvent

  • ViewGroup
    return true; 消耗该事件,事件往上回归,
    return falsereturn super.onTouchEvent() 事件往上回归。

以上的分析仅在 MotionEvent.ACTION_DOWN事件内分析,其实 MotionEvent.ACTION_MOVEMotionEvent.ACTION_UP的事件一样,只不过都是传递到这里就往上回归了

你可能感兴趣的:(Android 事件分发)