Android多点触控获取错误的指针和/或XY值

我从mutlitouch事件中获取X和Y值时遇到问题.下面的代码显示了在触发POINTER_DOWN和POINTER_UP事件时如何获取值,但是X和Y值似乎在POINTER_UP事件中混淆/重复.

@Override
public void onTouchEvent(MotionEvent event) {

int id, pointerIndex;

switch (event.getAction() & MotionEvent.ACTION_MASK) {

  case MotionEvent.ACTION_POINTER_DOWN:

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT;
    id = event.getPointerId(pointerIndex);

    Log.e("Down", ""+id+" "+event.getX(id)+" "+event.getY(id));

    break;

case MotionEvent.ACTION_POINTER_UP:

    pointerIndex = (event.getAction() & MotionEvent.ACTION_POINTER_ID_MASK) 
    >> MotionEvent.ACTION_POINTER_ID_SHIFT;
    id = event.getPointerId(pointerIndex);

    Log.e("UP", ""+id+" "+event.getX(id)+" "+event.getY(id));

    break;
}

super.onTouchEvent(event);

}

这通常导致以下lolcat:

E/DOWN    (25070): 0 279.60922 279.17447
E/DOWN    (25070): 1 513.20044 520.3252
E/DOWN    (25070): 2 422.6651 358.72418

E/UP      (25070): 0 279.60922 279.17447
E/UP      (25070): 1 422.6651 358.72418 
E/UP      (25070): 2 422.6651 358.72418 

在这里,您可以看到id 1的XY位置错误,而是显示值id 2.

请注意,不会调用任何ACTION_CANCEL事件.我想我使用MASKS / ANDing有点不对劲.任何帮助将非常感激!

解决方法:

显然,event.getX和event.getY应该被赋予指针索引,而不是指针id.

上一篇:在Android中滑动以取消动画


下一篇:头条安卓面试总结 (2019 / 04)