美文网首页
Android 事件分发

Android 事件分发

作者: trry_ing | 来源:发表于2017-05-15 10:44 被阅读19次

    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 事件分发

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