Der einfachste Weg beschäftigt sich mit absoluten Koordinaten schreiben:
motionEvent.setLocation(e.getRawX(), e.getRawY());
Bei der Verwendung der VelocityTracker-Klasse treten Probleme auf. Die Geschwindigkeitsmessung funktioniert sehr gut, wenn Sie die Geschwindigkeit von Berührungsereignissen in einer sich nicht bewegenden Ansicht messen, aber sobald sich die Ansicht mit dem Finger bewegt (mit translateY / X oder setY / X), ist die Geschwindigkeit vollständig zufällig (ich denke, die Geschwindigkeit wird anhand der Position der Ansicht berechnet?). Hat jemand irgendwelche Vorschläge, um beim Bewegen einer Ansicht eine genaue Bewegungsgeschwindigkeit zu erhalten?
Hinweise: Ich verwende die Touch-Ereignisse aus dem onTouchListener von View für die Geschwindigkeitsmessung.
Prost
Sie sollten verfolgen, wie weit die Ansicht verschoben wurde, und rufen Sie MotionEvent.offsetLocation
, um die Ereigniskoordinaten zu "reparieren", bevor sie an ein VelocityTracker
übergeben werden.
Lesen Sie die Dokumentation für MotionEvent.getRawX
/ Y
auch.
Sie geben die X / Y-Koordinaten des Zeigers relativ zum gesamten Bildschirm zurück, daher sind sie von der Bewegung der Ansicht, die Sie gerade hören, nicht betroffen.
Der einfachste Weg beschäftigt sich mit absoluten Koordinaten schreiben:
motionEvent.setLocation(e.getRawX(), e.getRawY());
Bei der Verwendung der VelocityTracker-Klasse treten Probleme auf. Die Geschwindigkeitsmessung funktioniert sehr gut, wenn Sie die Geschwindigkeit von Berührungsereignissen in einer sich nicht bewegenden Ansicht messen, aber sobald sich die Ansicht mit dem Finger bewegt (mit translateY / X oder setY / X), ist die Geschwindigkeit vollständig zufällig (ich denke, die Geschwindigkeit wird anhand der Position der Ansicht berechnet?). Hat jemand irgendwelche Vorschläge, um beim Bewegen einer Ansicht eine genaue Bewegungsgeschwindigkeit zu erhalten?
Hinweise: Ich verwende die Touch-Ereignisse aus dem onTouchListener von View für die Geschwindigkeitsmessung.
Prost
Sie sollten verfolgen, wie weit die Ansicht verschoben wurde, und rufen Sie %code% , um die Ereigniskoordinaten zu "reparieren", bevor sie an ein %code% übergeben werden.
%Vor%Lesen Sie die Dokumentation für %code% / %code% auch.
Sie geben die X / Y-Koordinaten des Zeigers relativ zum gesamten Bildschirm zurück, daher sind sie von der Bewegung der Ansicht, die Sie gerade hören, nicht betroffen.
Unter der Annahme, dass Sie nicht skalieren, ist die Geschwindigkeit einer Berührung die Menge, um die sich Ihr Finger bewegt hat, geteilt durch die Zeit. Die Zeit ist einfach zu bekommen - fordern Sie einfach die Systemzeit in Millisekunden bei jedem Ereignis an und subtrahieren Sie. Bei einer übersetzten Ansicht möchten Sie sicherstellen, dass Sie das gleiche Bezugssystem verwenden. Verfolgen Sie im Wesentlichen den X- und Y-Versatz der Ansicht, indem Sie sie verschieben, und fügen Sie den Versatz der Berührung hinzu, um den Gesamtversatz Ihres Fingers relativ zum Ursprung zu erhalten. Vergleichen Sie nur diese Zahlen für Ihre Geschwindigkeitsverfolgung.
Wenn Sie auch die Ansicht skalieren, wird es komplizierter. Sie müssen die gleiche Art von Mathe mit dem Skalierungsfaktor machen. Im Grunde übersetzt man alle Punkte in ein und dasselbe Referenzsystem.q
Ich denke, Sie sprechen über die Kamerabewegung, als würden Sie einem Athleten in Echtzeit folgen. Wenn ja, gibt es nur einen Weg: Während der Erfassung der Bewegung benötigen Sie einen festen Punkt, wie einen Tennisball im Boden, um die Geschwindigkeit des statischen Balls zu "einem Gelenk" im Athleten zu subtrahieren. Dies ist notwendig, um die X-, Y-Koordinaten im Anfangs- und Endbild des statischen Objekts zu erhalten, um den Unterschied zum bewegten Objekt zu machen.
Bewegliches Objekt: Quadrat ((X Position End-X Position Anfangs) ^ 2 + (Y Position End-Y Position Initial) ^ 2) Dann wandeln Sie Pixel in Meter oder Meilen um dann dividiere das Ergebnis durch Sekunden (benötigt auch eine Umwandlung von Millisekunden) Sie erhalten km / h und mp / h für das bewegte Objekt.
Führen Sie alle Schritte für das statische Objekt aus. Subtrahiere das Ergebnis vom statischen Objekt auf das sich bewegende Objekt.
Das Gleiche gilt für Zoom-Operationen. Alle Operationen sind manuell. Wenn Sie die reale Geschwindigkeit in Echtzeit wollen, brauchen Sie eine automatische Verfolgung, die nicht für Android geeignet ist. Im Fußball brauchen Sie mit 4 Kameras Quadrozessoren mit mindestens 3000Mhz. Ich rate, Matlab zu benutzen.
Unter der Annahme, dass Sie nicht skalieren, ist die Geschwindigkeit einer Berührung die Menge, um die sich Ihr Finger bewegt hat, geteilt durch die Zeit. Die Zeit ist einfach zu bekommen - fordern Sie einfach die Systemzeit in Millisekunden bei jedem Ereignis an und subtrahieren Sie. Bei einer übersetzten Ansicht möchten Sie sicherstellen, dass Sie das gleiche Bezugssystem verwenden. Verfolgen Sie im Wesentlichen den X- und Y-Versatz der Ansicht, indem Sie sie verschieben, und fügen Sie den Versatz der Berührung hinzu, um den Gesamtversatz Ihres Fingers relativ zum Ursprung zu erhalten. Vergleichen Sie nur diese Zahlen für Ihre Geschwindigkeitsverfolgung.
Wenn Sie auch die Ansicht skalieren, wird es komplizierter. Sie müssen die gleiche Art von Mathe mit dem Skalierungsfaktor machen. Im Grunde übersetzt man alle Punkte in ein und dasselbe Referenzsystem.q
Ich denke, Sie sprechen über die Kamerabewegung, als würden Sie einem Athleten in Echtzeit folgen. Wenn ja, gibt es nur einen Weg: Während der Erfassung der Bewegung benötigen Sie einen festen Punkt, wie einen Tennisball im Boden, um die Geschwindigkeit des statischen Balls zu "einem Gelenk" im Athleten zu subtrahieren. Dies ist notwendig, um die X-, Y-Koordinaten im Anfangs- und Endbild des statischen Objekts zu erhalten, um den Unterschied zum bewegten Objekt zu machen.
Bewegliches Objekt: Quadrat ((X Position End-X Position Anfangs) ^ 2 + (Y Position End-Y Position Initial) ^ 2) Dann wandeln Sie Pixel in Meter oder Meilen um dann dividiere das Ergebnis durch Sekunden (benötigt auch eine Umwandlung von Millisekunden) Sie erhalten km / h und mp / h für das bewegte Objekt.
Führen Sie alle Schritte für das statische Objekt aus. Subtrahiere das Ergebnis vom statischen Objekt auf das sich bewegende Objekt.
Das Gleiche gilt für Zoom-Operationen. Alle Operationen sind manuell. Wenn Sie die reale Geschwindigkeit in Echtzeit wollen, brauchen Sie eine automatische Verfolgung, die nicht für Android geeignet ist. Im Fußball brauchen Sie mit 4 Kameras Quadrozessoren mit mindestens 3000Mhz. Ich rate, Matlab zu benutzen.
Tags und Links android android-view