事件类型
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)
如果之前按下的手指离开屏幕,后面的手指如果再次发生触摸事件,则后面手指的索引将会依次减小;如果有新的手指按下,则新的手指将使用离开屏幕的那个手指索引。