2013-08-03 17 views
8

Ich versuche, die Leinwand um die Mitte des Bildschirms zu drehen, die (0,0) Koordinaten an der rechten unteren Ecke zu bekommen. DieseAndroid: dreht Leinwand um die Mitte des Bildschirms

ist, wie ich es tun:

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

Es richtig dreht, und alles ist in der AVD mit API-Ebene 17. Aber auf der AVD mit API-Ebene 8 die (0,0) perfekt koordinieren erscheint an der falschen Stelle. Vor Drehung geziemte das Bild den ganzen Bildschirm bei diesem Gerät auch, aber jetzt sieht es wie folgt aus:

enter image description here

, was das Problem verursacht?

* EDIT!

Das Problem wird durch Drehen der Leinwand um seinen eigenen Mittelpunkt aufgelöst:

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

Aber immer noch, warum nicht die vorherige Version der Arbeit mit älteren APIs?

Antwort

0

Es ist nicht immer notwendig, dass Canvas und Display die gleiche Größe haben. Display.getWidth() ist veraltet und es wird vorgeschlagen, Display.getSize() stattdessen zu verwenden. Von der documentation:

Ruft die Größe der Anzeige in Pixel ab.

zu beachten, dass dieser Wert nicht Rechen- Layouts verwendet werden sollte, da ein Gerät typischerweise Bildschirm Dekoration wird (wie beispielsweise eine Statusleiste) entlang der Ränder der Anzeige, die die Menge der Anwendung Raumes von der zur Verfügung stehenden reduzieren Größe zurückgegeben hier. Layouts sollten stattdessen die Fenstergröße verwenden.

Also, bei canvas Matrix-Transformation, immer die canvas als Referenz anstelle der Anzeige oder Fenstern, weil die Leinwand, um den genauen Wert geben würde. So die Leinwand um das Zentrum zu drehen, müssen Sie die Mitte des canvas.

Die Mitte der Leinwand ist (canvas.getWidth()/2 , canvas.getHeight()/2)

Verwandte Themen