So programmieren Sie Multitouch

8

Ich entwickle also eine Anwendung, die Multitouch verarbeiten muss. Grundsätzlich möchte ich Single Touch zum Drehen (das ist kein Problem). Und Multitouch zum Scrollen.

Ich habe den Basiscode, aber ich habe Probleme, wenn der Wechsel von Single zu Multitouch und umgekehrt geschieht. 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 Mittelposition 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.

Das ist mein Code:

%Vor%

Die onTouchDown-Funktion der Kamera legt nur den ersten Wert der Touch-Bewegung fest. Deshalb benutze ich es auch in der Aufwärtsbewegung, um einen neuen Anfangswert für die Single-Touch-Bewegung festzulegen, wenn Sie von einem Multitouch kommen.

Ich hoffe jemand weiß was mein Problem ist und kann mir weiterhelfen.

    
Espen 19.11.2010, 20:46
quelle

2 Antworten

10

Beginnen Sie hier, wenn Sie es noch nicht gelesen haben, es geht über eine Reihe von Dingen, die sich mit Multitouch in Android beschäftigen: Ссылка

Ein paar Dinge über Ihren geposteten Code:

  1. Sie werden ACTION_DOWN nie mit einer Zeigeranzahl von 2 sehen. ACTION_DOWN wird nur für den ersten Zeiger gesendet, der untergeht. Alle Finger, die den Bildschirm nach dem ersten berühren, senden ACTION_POINTER_DOWN .
  2. Nehmen Sie nicht nur bis zu zwei Fingerberührungen an, da kann es leicht mehr geben.
  3. Es ist viel einfacher, mit der maskierten Aktion zu arbeiten ( MotionEvent#getActionMasked() ) als für jeden Zeigerindex einzeln zu codieren.
  4. Am Ende spielen Indizes nur eine Rolle, um Daten aus einem MotionEvent herauszuholen. Wenn Sie die Zeigerbewegung im Zeitverlauf verfolgen, verwenden Sie die Zeiger-ID.
  5. Zeiger-IDs sind nur Zahlen. Machen Sie keine Annahmen darüber, welche Werte sie haben werden, außer dass sie ganze Zahlen von 0 und höher sein werden.
adamp 20.11.2010, 04:26
quelle
2

Sie können das mit einfacher Mathematik lösen, obwohl es vielleicht schon einen besseren Weg gibt.

Erstellen Sie einfach ein Objekt, das die Position jedes Fingers enthält, wenn das Ereignis .ACTION_POINTER_X_UP ausgelöst wird, und ein boolesches Objekt, das den Typ des zuletzt verwendeten Touchmodus enthält.

%Vor%

Als nächstes wird die Anweisung ACTION_MOVE (innerhalb des Falls = 1) ausgelöst, wenn der Benutzer seinen Finger bewegt, während er von Multi zu Single geht.

Je nachdem, was Sie tun möchten, können Sie nun entweder die einzelne Bewegung ignorieren (der boolesche Wert ist Ihre Prüfung), bis das Ereignis .ACTION_UP ausgelöst wird, und Sie setzen den Booleschen Wert auf false zurück

oder

Sie rufen eine Methode auf, die basierend auf den gespeicherten Standortwerten und dem Finger, der sich noch auf dem Bildschirm befindet, einige Berechnungen anstellt. Die Mathematik sollte ziemlich einfach sein, aber ich weiß nicht, was du eigentlich machen willst.

    
user432209 19.11.2010 22:13
quelle

Tags und Links