Así que estoy desarrollando una aplicación que debe manejar multitouch. Básicamente quiero un solo toque para rotar (esto no es problema). Y multitáctil para desplazarse.Cómo codificar para multitouch
Tengo el código básico, pero estoy teniendo problemas cuando ocurre el cambio de single a multitouch y vice verca. Básicamente, el movimiento se sacudirá porque la posición media del multitouch (dos dedos) y la posición absoluta del dedo se encuentran a una distancia. Entonces, si tengo dos dedos en la pantalla, ellos hacen una posición mediana, y luego levantan un dedo, sería como un movimiento rápido desde esa posición mediana hasta la posición de dedo único absoluto. Este será el movimiento que no quiero.
Este es mi código:
@Override
public boolean onTouchEvent(MotionEvent event) {
float xEvent[] = new float[ 2 ];
float yEvent[] = new float[ 2 ];
switch(event.getPointerCount()) {
case 1:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchRotate(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
case 2:
xEvent[ 0 ] = event.getX(0);
yEvent[ 0 ] = event.getY(0);
xEvent[ 1 ] = event.getX(1);
yEvent[ 1 ] = event.getY(1);
switch(event.getAction()) {
case MotionEvent.ACTION_DOWN:
camera.onTouchDown(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_MOVE:
camera.onTouchSlide(((xEvent[ 0 ] + xEvent[ 1 ])/2), ((yEvent[ 0 ] + yEvent[ 1 ])/2));
return true;
case MotionEvent.ACTION_POINTER_1_UP:
camera.onTouchDown(xEvent[ 1 ], yEvent[ 1 ]);
return true;
case MotionEvent.ACTION_POINTER_2_UP:
camera.onTouchDown(xEvent[ 0 ], yEvent[ 0 ]);
return true;
default: return super.onTouchEvent(event);
}
default: return false;
}
}
La función onTouchDown de la cámara justo establece el primer valor del movimiento táctil. Es por eso que también lo uso en el movimiento ascendente para establecer un nuevo valor de inicio para el movimiento de un solo toque cuando proviene de un multitouch.
Espero que alguien sepa cuál es mi problema y me puede ayudar más.
Gracias! Acabo de terminar una implementación que funciona al 80%. Pero después de leer ese enlace, creo que puedo hacerlo mejor usando máscaras e identificadores. – Espen