マルチタッチ イベントから X 値と Y 値を取得する際に問題があります。以下は、POINTER_DOWN および POINTER_UP イベントが発生したときに値を取得する方法を示すコードですが、POINTER_UP イベントで X 値と Y 値が混同/重複しているようです。
@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 の使用に何か問題があると思います。どんな助けでも大歓迎です!