有关touchEvent的事件里都有一个 MotionEvent 参数,下面来简单介绍一下它的属性的一些含义和使用的方法
通常单指操作时,一般如下:
- switch (event.getAction()) {//第一个触摸点
- case MotionEvent.ACTION_DOWN: //按下 = 0
- <span style="white-space:pre"> float x = event.getX();</span>
- break;
- case MotionEvent.ACTION_MOVE: //移动 = 2
- break;
- case MotionEvent.ACTION_UP: // 抬起 = 1
- break;
- }
多点触摸时:
以下属性在api level 5出现,api level 8过时。
MotionEvent.ACTION_POINTER_1_DOWN
MotionEvent.ACTION_POINTER_2_DOWN
MotionEvent.ACTION_POINTER_3_DOWN
MotionEvent.ACTION_POINTER_1_UP
MotionEvent.ACTION_POINTER_2_UP
MotionEvent.ACTION_POINTER_3_UP
api level 8 即2.2后起用:MotionEvent.ACTION_POINTER_DOWNMotionEvent.ACTION_POINTER_UP
通过以下测试发现,多点触摸时,
- switch (event.getAction()) {
- // case MotionEvent.ACTION_DOWN: //按下 = 0
- // System.out.println("onTouchEvent");
- // break;
- // case MotionEvent.ACTION_MOVE://移动 = 2
- //
- // break;
- // case MotionEvent.ACTION_UP:// 抬起 = 1
- //
- // break;
- case MotionEvent.ACTION_POINTER_DOWN://非第一个触摸点按下 = 5
- System.out.println("ACTION_POINTER_DOWN");
- break;
- case MotionEvent.ACTION_POINTER_UP: //非第一个触摸点抬起 = 6
- System.out.println("ACTION_POINTER_UP");
- break;
- default:
- break;
- }
第二个点以后取x、y坐标值
- float x2 = event.getX(event.getActionIndex());//action index 从0开始到pointer count -1 结束
- float y2 = event.getY(event.getActionIndex());//某个index的触摸点的 相对于当前view的y坐标
- event.getPointerCount(); //触摸点的数量
多点时获取坐标 索引 id 示例
- int pointerCount = event.getPointerCount();
- switch (event.getAction() & MotionEvent.ACTION_MASK) {
- switch (event.getActionMasked()) {
- case MotionEvent.ACTION_DOWN:
- case MotionEvent.ACTION_POINTER_DOWN:
- case MotionEvent.ACTION_MOVE:
- for (int i = 0; i < pointerCount; i++) {
- int id = event.getPointerId(i); //同一点的id值保持不变
- int index = i;//同一点的索引值,是可变的,当由多指逐渐减少时,index--
- dx = (int) event.getX(index);
- dy = (int) event.getY(index);
- }
- invalidate();
- break;
- case MotionEvent.ACTION_CANCEL:
- default:
- break;
- }