2013-07-12 13 views
6

Trovo che l'unità del sistema di coordinate di Canvas sia diversa da quella dello schermo.Qual è l'unità del sistema di coordinate della tela? - android

Per esempio nel mio caso come sotto:

di un punto particolare, il suo su schermo coordinate ottenute da ImageView.getX() e ImageView.getY() è (336, 578).

Quindi per prova ed errore, Disegno un punto sulla tela in modo che questo punto cada ESATTAMENTE nella stessa posizione di ImageView. Ho chiamato canvas.drawCircle(330, 440, radius, paint); per raggiungere questo obiettivo.

Qui viene la domanda:

Perché il 2 coordinate, (336, 578) e (330, 440), diverso?

Forse perché lo schermo e la tela usano unità diverse?

È un problema riguardante pixel, dp e tutto il resto?

risposta

1

Si può provare a convertire in e da coordinate di una finestra utilizzando View.getLocationInWindow in questo modo si sarà sempre sicuri di utilizzare lo stesso sistema di coordinate.

Coordinate di ImageView.getX e Y sono relative al genitore. Le coordinate della tela sono relative alla vista. Ciò potrebbe causare le differenze

Modifica: Suppongo che in un punto si ottengano le coordinate della vista (utilizzando getX e getY). Converti questi in coordinate della finestra. Chiama questi viewXY[].

Quando è necessario utilizzarli, per disegnare nella tela, converti anche le coordinate in alto e a sinistra in coordinate della finestra. Li chiamiamo questi canvasXY[].

Ora, la posizione X da disegnare sarebbe viewXY[0] - canvasXY[0] e la posizione Y sarebbe viewXY[1] - canvasXY[1].

+0

Cosa significano le coordinate della finestra ottenute da 'View.getLocationInWindow', per favore? –

+0

Sembra avere molto senso. Come posso unificare le 2 coordinate? Grazie! –

+0

Ho aggiunto qualche altra descrizione per farlo. Spero che aiuti – nickmartens1980

1

Le coordinate di posizione di una vista sono sempre relative al suo genitore. È come dire, dove per quanto riguarda il suo genitore è questa vista posizionata.

C'è in un'altra cosa, schermo Coordinate. Questo dice dove, rispetto alla finestra in alto/a sinistra (si pensi allo schermo fisico reale), questo oggetto viene posizionato. Questo può essere ottenuto tramite View.getLocationOnScreen.

Se si desidera confrontare due posizioni, saranno equivalenti solo se la vista principale di entrambe queste posizioni è uguale o se si utilizzano coordinate dello schermo assolute. Altrimenti, otterrai risultati che "sembrano" diversi.

Se si desidera unificare i due, portarli a un genitore comune o utilizzare le coordinate assolute.

+0

ha molto senso. Quindi posso disegnare il punto su tela con la posizione assoluta dello schermo ?? Come posso farlo?Le x e y in 'canvas.drawCircle (x, y, radius, paint)' sono semplicemente 2 numeri float. Come posso dire alla funzione che voglio usare la posizione assoluta dello schermo? –

Problemi correlati