查看MotionEvent源代码:
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;
public static final int ACTION_OUTSIDE = 4;
public static final int ACTION_POINTER_DOWN = 5;
public static final int ACTION_POINTER_UP = 6;
public static final int ACTION_HOVER_MOVE = 7;
public static final int ACTION_SCROLL = 8;
public static final int ACTION_HOVER_ENTER = 9;
public static final int ACTION_HOVER_EXIT = 10;
由以上看出动作变量为action的低8位信息。
public static final int ACTION_POINTER_INDEX_MASK = 0xff00;
public static final int ACTION_POINTER_INDEX_SHIFT = 8;
public static final int ACTION_POINTER_1_DOWN = ACTION_POINTER_DOWN | 0x0000;
public static final int ACTION_POINTER_2_DOWN = ACTION_POINTER_DOWN | 0x0100;
public static final int ACTION_POINTER_3_DOWN = ACTION_POINTER_DOWN | 0x0200;
public static final int ACTION_POINTER_1_UP = ACTION_POINTER_UP | 0x0000;
public static final int ACTION_POINTER_2_UP = ACTION_POINTER_UP | 0x0100;
@Deprecated
public static final int ACTION_POINTER_3_UP = ACTION_POINTER_UP | 0x0200;
@Deprecated
public static final int ACTION_POINTER_ID_MASK = 0xff00;
@Deprecated
public static final int ACTION_POINTER_ID_SHIFT = 8;
有以上可以看出使用
int action = event.getAction(); 单点触控时有效
int action1 = event.getActionMasked(); 两者的区别。只有使用后者才能在多点触控时也获取到正确的状态。
int index = event.getActionIndex(); 获取到当前的触控id
public final int getActionIndex() {
return (nativeGetAction(mNativePtr) & ACTION_POINTER_INDEX_MASK)
>> ACTION_POINTER_INDEX_SHIFT;
}
int id=event.getPointerId(1);
int activeId=event.findPointerIndex(id);