android 多点触控的几个概念

428 阅读2分钟

getActionMasked()

多点触控时使用getActionMasked()取代getAction()来获取事件类型

Pointer

一个pointer就代表一个触摸点。一个MotionEvent对象中可能存储多个pointer的相关信息,每个pointer都有自己的id和index,id在整个事件流中是不会发生变化的,但是index会发生变化

  • PointerId

每根手指从按下、移动到离开屏幕,每个手指都会拥有一个固定PointerId的值

  • PointerIndex

每根手指从按下、移动到离开屏幕,每根手指在每一个事件的Index可能是不固定的

  • PointerId和PointIndex的例子
事件 PointerId PointerIndex
依次按下三根手指 三根手指的id依次为0、1、2 三根手指的index依次为0、1、2
抬起第二根手指 第一根手指的id为0,第三根手指的id为2 第一根手指的index为0,第三根手指的index变为1
抬起第一根手指 第三根手指的id为2 第三根手指的index变为0

相关事件

事件 简介
ACTION_DOWN 第一个手指初次接触到屏幕时触发
ACTION_MOVE 手指在屏幕上滑动时触发,会多次触发
ACTION_UP 最后一个手指离开屏幕时触发
ACTION_POINTER_DOWN 有非主要的手指按下(即按下之前已经有手指在屏幕上)
ACTION_POINTER_UP 有非主要的手指抬起(即抬起之后仍然有手指在屏幕上)

相关方法

方法 简介
getActionMasked() 在多点触控中取代getAction()
getPointerCount() 获取在屏幕上手指的个数
getX(int pointerIndex) 获取某一个指针(手指)的X坐标
getY(int pointerIndex) 获取某一个指针(手指)的Y坐标
getActionIndex() 获取该事件对应的PointerIndex
findPointerIndex(int pointerId) 通过PointerId获取到当前状态下PointIndex
getPointerId(int pointerIndex) 获取一个指针的PointerId,在手指按下和抬起之间ID始终不变