В моем прецеденте есть 2 значка (на сцене GL), я хотел бы обрабатывать их нажатое, удерживаемое и выпущенное состояние параллельно и независимо (с двумя пальцами).Как работает мультитач на Android?
Я пробовал много вариантов кода для этого. В настоящее время это лучший исполнительский, но по-прежнему плохой код:
@Override
public boolean onTouch(View v, MotionEvent e) {
if (v != this) return false;
boolean down = false;
switch (e.getActionMasked()) {
case MotionEvent.ACTION_DOWN:
case MotionEvent.ACTION_MOVE:
case MotionEvent.ACTION_POINTER_DOWN:
down = true;
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_POINTER_UP:
case MotionEvent.ACTION_OUTSIDE:
case MotionEvent.ACTION_CANCEL:
down = false;
break;
}
boolean handled = e.getPointerCount() > 0;
for(int i = 0; i < e.getPointerCount(); i++) {
e.getPointerCoords(i, coords);
int pointer = e.getPointerId(i);
if (down) {
scene.sizes.pixelToCm(vec, coords.x, coords.y);
touchMap.set(pointer, vec.getX(), vec.getY());
} else {
touchMap.clear(pointer);
}
}
return true;
}
В этом случае, когда я нажмите и удерживайте значок A, это нормально. Затем я сохраняю значок A и нажимаю значок B, это также хорошо, оба значка нажаты. Но когда я отпускаю значок B, значок A также мгновенно освобождается.
Я полагаю, обработчик события onTouch() получает событие UP, но его список указателей (e.getPointerCount(), e.getPointerCoords()) также содержит указатели, которые DOWN.
Любой может помочь мне разрешить эту ситуацию?