2013-08-03 31 views
8

Sto provando a ruotare la tela attorno al centro dello schermo, per ottenere le coordinate (0,0) in basso a destra.Android: ruota la tela attorno al centro dello schermo

Questo è come fare:

Display display = getWindowManager().getDefaultDisplay(); 
int width = display.getWidth(); 
int height = display.getHeight(); 
canvas.rotate(180, width/2, height/2); 

Non ruotare correttamente, e tutto è perfetto al AVD con livello di API 17. Ma l'intervallo AV con livello di API 8 il (0,0) coordinata appare nel posto sbagliato. Prima di rotazione il quadro era giusto l'intero schermo in questo dispositivo troppo, ma ora sembra che questo:

enter image description here

che cosa sta causando il problema?

* MODIFICA!

Il problema viene risolto facendo ruotare la tela attorno al proprio punto di mezzo:

canvas.rotate(180,canvas.getWidth()/2,canvas.getHeight()/2); 

Ma ancora, perché non fa il lavoro precedente versione con le API più anziani?

risposta

0

Non è sempre necessario che lo Canvas e lo Display abbiano la stessa dimensione. Display.getWidth() è deprecato e si consiglia di utilizzare Display.getSize() invece. Dalla documentation:

Ottiene le dimensioni del display, in pixel.

noti che questo valore non deve essere usato per layout di elaborazione, dato che il dispositivo avrà tipicamente decorazione schermo (ad esempio una barra di stato) lungo i bordi del display che riducono la quantità di applicazione spazio disponibile dalla la dimensione è tornata qui. I layout dovrebbero invece utilizzare le dimensioni della finestra.

Quindi, in caso di canvas matrice di trasformazione, utilizzare sempre il canvas come riferimento piuttosto che la visualizzazione o la finestra, perché la tela darebbe il valore preciso. Quindi, per ruotare la tela attorno al centro, è necessario il centro di canvas.

Il centro della tela è (canvas.getWidth()/2 , canvas.getHeight()/2)

Problemi correlati