Also entwickle ich eine Anwendung, die Multitouch verarbeiten muss. Grundsätzlich möchte ich Single Touch zum Drehen (das ist kein Problem). Und Multitouch zum Scrollen.Wie für Multitouch zu codieren
Ich habe den grundlegenden Code in, aber ich habe Probleme, wenn der Wechsel von Single zu Multitouch und umgekehrt vera, auftreten. Grundsätzlich ruckt die Bewegung, weil die mittlere Position des Multitouchs (zwei Finger) und die absolute Position des einzelnen Fingers entfernt sind. Wenn ich also zwei Finger auf dem Bildschirm habe, bilden sie eine mittlere Position und heben dann einen Finger, es wäre wie eine schnelle Bewegung von dieser mittleren Position zur absoluten Einzelfingerposition. Das wird die Bewegung sein, die ich nicht will.
Dies ist mein Code:
@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;
}
}
Die OnTouchDown Funktion der Kamera stellt nur den ersten Wert des Touch bewegen. Deshalb benutze ich es auch in der Aufwärtsbewegung, um einen neuen Anfangswert für die Single-Touch-Bewegung zu setzen, wenn ich von einem Multitouch komme.
Ich hoffe jemand weiß, was mein Problem ist und kann mir weiter helfen.
Danke! Ich habe gerade eine Implementierung abgeschlossen, die zu 80% funktioniert. Aber nachdem ich diesen Link gelesen habe, denke ich, dass ich besser mit Masken und IDs umgehen kann. – Espen