2011-01-12 11 views
2

Wenn Benutzer den Bildschirm berührt kann ich Koordinaten dieser Berührung mit Methoden von MotionEvent getX() und getY() erhalten.Bildschirm und Anzeigen von Koordinaten in Android

Aber wenn ich es richtig für das Zeichnen von Leinwand verstanden habe, werden andere Koordinaten verwendet.

Mein Kollege meinte, das sind Sicht- und Bildschirmkoordinaten. Aber er wusste nicht, ob es Transformationsmethoden gibt.

Vielleicht können Sie mir helfen.

Vielen Dank im Voraus,

Mur

UPD

ich ein wenig Verwirrung habe. Ich verwende Osmdroid, sie zeichnen Overlays als Leinwand.

Wenn ich also Leinwandkoordinaten vergleiche, die sie zum Zeichnen mit MotionEvent-Koordinaten verwenden, verstehe ich nichts.

Dies sind Koordinaten des Rechtecks ​​(links, rechts, unten, oben) 16899.0/16948.0 -86483.0/-86515.0 Ich habe ausgedruckt.

Koordinaten von Motion sind 252,0/223,0

Antwort

1

Er ist falsch. Canvas verwendet nichts anderes. Sie müssen nur berücksichtigen, wo sich die Arbeitsfläche auf dem Bildschirm in Bezug auf die Position des Benutzers befindet.

0

Wenn Sie an der Position 0,0 auf Ihrer Leinwand zeichnen, zeichnen Sie in der linken oberen Ecke. Du musst also nichts Besonderes machen. http://developer.android.com/reference/android/view/View.html#getLocationInWindow (int [])

+0

ich ein Update auf meine Frage schrieb – Tima

0

:

Vielleicht ist Ihr Freund hat mit Bildschirm/Fenster-Stellen ein wenig verwirrt bekam Dies sind Koordinaten des Rechtecks ​​(links, rechts, unten, oben) 16899.0/16948.0 -86483.0/-86515.0 Ich habe es ausgedruckt.

Koordinaten von Motion sind 0/0 bis 252/223

Aussehen wie osmdroid Koordinaten ist trasforming. Dies ist für eine Karte sinnvoll, wenn Sie also etwas bei 0,0 zeichnen, zeichnen Sie etwas an Ihrem Standort.

Ich denke, zurückkehrende Koordinaten sind Kartenkoordinaten, beginnend von Ort (0,0) weil ein Bild 16899.0 + 86483.0 = 103382.0 Pixel groß und 16948.0 + 86515.0 = 103463.0 Pixel breit ist ein Bild von 10200 Gigapixel, verbraucht fast 30 Tb Speicher, und ich bin im Zweifel, dass ein smarphone kostenlos so viel Speicher haben kann ...

Also für Ihre app schlage ich ein Ansatz wie folgt aus:

touch = touch coordinates 
scale = map scale 
top = top left of the map 

point_on_map = top + (touch*scale) 
Verwandte Themen