我从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时出了点问题。任何帮助将不胜感激!
答案 0 :(得分:4)
显然,event.getX和event.getY应该被赋予指针 index ,而不是指针 id 。