Motionvent详解

事件类型

Android将所有触摸事件都放在了Motionvent里,这些事件类型有

  • ACTION_DOWN,第一个手指初次接触到屏幕时触发
  • ACTION_MOVE,手指在屏幕上滑动时触发
  • ACTION_UP,最后一个手指离开屏幕时触发
  • ACTION_POINTER_DOWN,手指接触到屏幕时触发(需要有其它手指在屏幕上)
  • ACTION_POINTER_DOWN,手指离开屏幕时触发(需要有其它手指在屏幕上)

事件结构

getAction获取到的触摸事件是一个32位值,但是只用到了低16位,其中前8位代表手指索引,后8位代表事件类型。

    //获取触摸事件类型 
    //ACTION_MASK=0xff
    public final int getActionMasked() {
        return nativeGetAction(mNativePtr) & ACTION_MASK;
    }
    
    //获取是哪个手指产生的事件
    //ACTION_POINTER_INDEX_MASK=0xff00
    //ACTION_POINTER_INDEX_SHIFT=8
    public final int getActionIndex() {
        return (nativeGetAction(mNativePtr) & ACTION_POINTER_INDEX_MASK)
                >> ACTION_POINTER_INDEX_SHIFT;
    }

多点触控

在多点触控中,第一个手指接触屏幕时产生的触摸事件中手指索引为0,第二个手指接着接触屏幕产生的触摸事件中手指索引为1,依次递增。

  • 第一个手指按下,ACTION_DOWN (0x00000000)
  • 第二个手指按下,ACTION_POINTER_DOWN (0x00000105)
  • 第三个手指按下,ACTION_POINTER_DOWN (0x00000205)
  • 第四个手指按下,ACTION_POINTER_DOWN (0x00000305)

如果之前按下的手指离开屏幕,后面的手指如果再次发生触摸事件,则后面手指的索引将会依次减小;如果有新的手指按下,则新的手指将使用离开屏幕的那个手指索引。

你可能感兴趣的:(Motionvent详解)