Android事件分发及拦截机制

时间:2022-10-21 22:33:33

一、MotionEvent

        这是Android为触摸事件封装的一个类。只要是重写触摸相关方法,参数一般都含有MotionEvent,可见其重要性。其中包括的一些常用的重要属性和方法:

  • MotionEvent.ActionDown:手指按下
  • MotionEvent.ActionMove:滑动
  • MotionEvent.ActionUp:手指抬起
  • getX():获取相对于控件左上角的X轴(横向)坐标
  • getY():获取相对于控件左上角的Y轴(纵向)坐标

二、Touch事件相关方法

Android事件分发及拦截机制
  • dispatchTouchEvent()事件分发
        当Touch事件发生时,dispatchTouchEvent()方法会以隧道方式(即从根元素依次向内层元素传递)将事件向下传递。一般来说我们不会去改写这个方法

        return true :事件交由当前view进行消费,同时事件停止向下传递

        return false:事件交由上层view或者Activity进行消费

        return super.dispatchTouchEvent():系统默认的事件分发处理逻辑

  • onInerceptTouchEvent()事件拦截
        该方法只有ViewGroup拥有。

        return true:表示拦截事件,把拦截的事件交由当前的view处理

        return fasle:表示不拦截事件,事件会被传递到子view的dispatchTouchEvent()来进行事件分发

  • onTouchEvent()事件响应
        onTouchEvent()方法会以冒泡方式(即从最内层的子元素依次向外传递)将事件向上传递。

        return true:表示消费了事件,事件停止向上传递

        return false:表示没有处理事件,事件继续向上传递

        return super.onTouchEvent():默认处理事件的逻辑,和返回false差不多


        我们也可以看着下图帮助理解,当ViewGroup拦截事件时就会停止向下分发并交给同层的事件消费进行处理。
Android事件分发及拦截机制

                       -------------------------------Android群英传第三章