Wie melde ich mich richtig übersetzen von pixel-Koordinaten in canvas-Koordinaten in Android?
Ich bin das erfassen eines MotionEvent
für eine lange klicken Sie auf ein Android - SurfaceView
mit einem GestureListener
. Ich habe dann übersetzen müssen die Koordinaten der MotionEvent
auf canvas-Koordinaten, von denen ich erzeugen kann, die custom map-Koordinaten (nicht Google Maps).
Von dem, was ich gelesen habe, nehme ich, dass angesichts der MotionEvent e
, e.getX()
und e.getY()
pixel-Koordinaten. Wie kann ich umwandeln diese Koordinaten, um die SurfaceView
's canvas-Koordinaten?
Hier ist mein GestureListener
zum hören für lange Klicks:
/**
* Overrides touch gestures not handled by the default touch listener
*/
private class GestureListener extends GestureDetector.SimpleOnGestureListener {
@Override
public void onLongPress(MotionEvent e) {
Point p = new Point();
p.x = (int) e.getX();
p.y = (int) e.getY();
//TODO translate p to canvas coordinates
}
}
Vielen Dank im Voraus!
Edit:
Hat das zu tun mit der Bildschirm-Größe/Auflösung/Farbtiefe und die Leinwand' Rect-Objekt?
- Haben Sie versucht
translate (float dx, float dy)
? - Ich sah in ihm. Leider hab ich keine Zeichnung auf die Leinwand. Ich brauche die tatsächlichen Koordinaten. Sobald ich die canvas-Koordinaten, die ich planen, zu übersetzen, meine Leinwand-Koordinaten, um die Anwendung der Karte Koordinaten, die für die navigation verwendet werden.
- Wirklich niemand sonst? Hat das zu tun mit der Bildschirm-Größe/Auflösung/Farbtiefe und die Leinwand' Rect-Objekt? Hat niemand getan, dass diese übersetzung vor?
- gelöst? Ich habe auch vor dem gleichen problem
- stackoverflow.com/a/3152172/755804
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn ich das richtig verstehe haben Sie eine Leinwand, Blick in surfaceview. Wenn dem so ist
versuchen
VIEW.getLeft() | getTop()
dass die Rendite der linke | Obere position der Ansicht relativ zum Eltern werden.Können Sie versuchen, die
MotionEvent.getRawX()/getRawY()
Methoden anstelle dergetX()/getY()
.Na, haben Sie das Bildschirm-px aus der Anzeige in x -, y -, und Sie können rufen Sie die Leinwand px via:
Dann können Sie die Mathematik zu tun, um den screen touch view mit den gegebenen px in der Sicht und der Bildschirm.
Sehen http://developer.android.com/reference/android/view/WindowManager.html für mehr info auf dem Bildschirm-manager. Ich denke, es muss initialisiert werden, die innerhalb einer Aktivität zu arbeiten.
Ich kam vor kurzem auf dieses problem, während Sie tun etwas sehr ähnlich und nach einigen trial-and-error und viel googeln landete ich die Anpassung dieser Antwort (https://stackoverflow.com/a/9945896/1131180) :
(e ist ein MotionEvent, so dass der beste Ort, um diesen code zu verwenden wäre in onTouch oder onLongPress)
Gibt es einige offensichtliche Optimierungen, die hier angewendet werden kann, aber ich denke, es ist mehr klar auf diese Weise.
wenn Sie scrollen, dann wird der tatsächliche y auf der Leinwand ist
Was ich in diesen Situationen ist nur:
Und übersetzung ist fertig...