3 Stimmen

Gibt es eine Möglichkeit, MotionEvent.transform(Matrix) in Android API Level 8 oder 9 zu simulieren?

Ich habe festgestellt, dass in Android API Level 11 (ICS) MotionEvent hat eine transform Methode, die eine Matrix . Das würde etwas, das ich gerade mache, etwas sauberer machen, aber ich kodiere für Stufe 8.

Gibt es eine praktische Alternative zu MotionEvent.transform() die auf früheren Android-Versionen funktioniert? Ich möchte, dass historische und Multi-Touch-Koordinaten transformiert werden, und ich möchte, dass die Unterscheidung zwischen relativen und absoluten Koordinaten korrekt gehandhabt wird, denn das ist der Punkt, an dem die Dinge etwas schwierig werden.

Was ich wirklich wissen möchte, ist, ob ich eine MotionEvent die eine transformierte Kopie einer anderen MotionEvent . Ich brauche eigentlich nicht beliebige Transformationen, aber ich muss in der Lage sein, sowohl zu übersetzen und zu skalieren. Ich glaube, ich kann übersetzen mit offsetLocation aber ich sehe keine Möglichkeit, die Skalierung einer MotionEvent (vor Stufe 11). Wie kann ich insbesondere die Koordinaten eines Multi-Touch-Ereignisses transformieren? Die obtain Methoden nehmen nur ein einzelnes (x,y)-Paar, kein Array.

Der Grund, warum ich dies tun möchte, ist, dass ich ein Objekt habe, das Ereignisse an eine Reihe von "Kind"-Objekten weiterleitet. Im Moment transformiert jedes dieser Kinder die Koordinaten auf eine Art Ad-hoc-Weise. Das übergeordnete Objekt (der Dispatcher) weiß jedoch, welche Transformation durchgeführt werden muss, so dass es viel sauberer wäre, einfach die MotionEvent (oder eine Kopie), bevor ich sie an die Kinder verschicke. Alternativ dazu könnte ich meine eigene Klasse erstellen, die entweder die MotionEvent oder kopiert und transformiert die Daten aus einem MotionEvent aber es wäre viel einfacher, wenn ich eine MotionEvent .

3voto

Laurence Gonsalves Punkte 131009

Soweit ich das beurteilen kann, lautet die Antwort "Nein". Es scheint keine Möglichkeit zu geben, die Koordinaten einer anderen PointerId als der ersten in einer MotionEvent in Vor-Honeycomb-Versionen von Android.

Die Abhilfe, die ich mir ausgedacht habe, bestand darin, meine eigene Wrapper-Klasse zu erstellen (die ich zufällig als TouchEvent ) und verwenden diese anstelle von MotionEvent beim Delegieren onTouch . Dies würde nicht funktionieren, wenn ich eine Standardschnittstelle implementieren würde, aber in meinem Fall kontrollierte ich die Schnittstelle meiner Delegierten, also funktioniert diese Lösung gut genug.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X