MotionEvent屏幕触摸事件分发流程

参考 Android 8.0 源码

  MotionEvent指的是手指触摸屏幕产生的事件。一般情况下产生的事件如下:
1 . 点击屏幕后松手,事件序列为ACTION_DOWN -> ACTION_UP;
2 . 点击屏幕滑动一会再松开,事件序列为ACTION_DOWN -> ACTION_MOVE -> ... -> ACTION_MOVE -> ACTION_UP;

  我们通过MotionEvent对象,可以得到点击事件发生的x和y坐标。安卓系统提供了两组方法来获取:getX()/getY()和getRawX()/getRawY()。getX()/getY()获取的是相对于当前View左上角的x和y坐标,getRawX()/getRawY()获取的是相对于手机屏幕左上角的x和y坐标。

public final class MotionEvent extends InputEvent implements Parcelable {
    //---;
    public static final int ACTION_DOWN = 0;//手指刚接触屏幕;
    public static final int ACTION_UP = 1;//手指从屏幕上松开的一瞬间;
    public static final int ACTION_MOVE = 2;//手指在屏幕上移动;
    public static final int ACTION_CANCEL = 3;
    //---;
}