2013-07-12 10 views
6

Ich finde, dass die Einheit des Koordinatensystems von Canvas von der des Bildschirms unterscheidet.Was ist die Einheit des Koordinatensystems von Canvas? - android

Zum Beispiel in meinem Fall wie folgt: (336, 578)

für einen bestimmten Punkt, das auf dem Bildschirm von ImageView.getX() und ImageView.getY() erhalten koordinieren.

Dann durch Versuch und Irrtum, Ich zeichne einen Punkt auf der Leinwand, so dass dieser Punkt genau die gleiche Position wie die ImageView fällt. Ich habe canvas.drawCircle(330, 440, radius, paint); genannt, um dies zu erreichen.

Hier kommt die Frage:

Warum würden die zwei Koordinaten (336, 578) und (330, 440), anders?

Ist es, weil der Bildschirm und die Leinwand unterschiedliche Einheiten verwenden?

Ist es ein Problem in Bezug auf Pixel, DP und all das?

Antwort

1

Sie könnten versuchen, zu und von Fensterkoordinaten mit View.getLocationInWindow zu konvertieren, auf diese Weise werden Sie immer sicher sein, dass Sie das gleiche Koordinatensystem verwenden.

Koordinaten von ImageView.getX und Y sind relativ zu den Eltern. Leinwandkoordinaten sind relativ zur Ansicht. Dies könnte die Unterschiede verursachen

Edit: Ich nehme an einer Stelle an, Sie erhalten die Koordinaten der Ansicht (mit getX und getY). Konvertiere diese in Fensterkoordinaten. Rufen Sie diese viewXY[].

Wenn Sie sie verwenden müssen, um Ihre Leinwand zu zeichnen, konvertieren Sie auch die oberen und linken Koordinaten in Fensterkoordinaten. Wir nennen diese canvasXY[].

nun die X Position zu ziehen wäre viewXY[0] - canvasXY[0] und die Y Position viewXY[1] - canvasXY[1] wäre.

+0

Was bedeuten die von 'View.getLocationInWindow' erhaltenen Fensterkoordinaten? –

+0

Es scheint viel Sinn zu machen. Wie kann ich die 2 Koordinaten vereinheitlichen? Vielen Dank! –

+0

Ich habe eine weitere Beschreibung dazu hinzugefügt. Hoffe es hilft – nickmartens1980

1

Die Positionskoordinaten einer Ansicht sind immer relativ zu ihrer übergeordneten Position. Es ist wie zu sagen, wo in Bezug auf seine Eltern diese Ansicht platziert ist.

Dort in einer anderen Sache, Bildschirmkoordinaten. Dies sagt, wo in Bezug auf das Fenster oben/links (denke tatsächlichen physikalischen Bildschirm) ist dieses Objekt platziert. Dies kann durch View.getLocationOnScreen erhalten werden.

Wenn Sie zwei Standorte vergleichen möchten, sind sie nur äquivalent, wenn die übergeordnete Ansicht dieser beiden Standorte identisch ist oder Sie absolute Bildschirmkoordinaten verwenden. Andernfalls erhalten Sie nur Ergebnisse, die "anders" erscheinen.

Wenn Sie die beiden vereinheitlichen wollen, nehmen Sie sie entweder zu einem gemeinsamen Elternteil oder verwenden Sie absolute Koordinaten.

+0

es macht viel Sinn. So kann ich den Punkt auf Leinwand mit dem Bildschirm absoluten Standort zeichnen? Wie kann ich das tun?Das x und y in 'canvas.drawCircle (x, y, radius, paint)' sind einfach 2 Gleitkommazahlen. Wie kann ich der Funktion mitteilen, dass ich den absoluten Bildschirmstandort verwenden möchte? –

Verwandte Themen