Ich versuche, die Leinwand um die Mitte des Bildschirms zu drehen, um die (0,0) Koordinaten unten rechts zu erhalten.
So mache ich es:
%Vor%Es rotiert korrekt und alles ist perfekt auf dem AVD mit API-Level 17. Aber auf dem AVD mit API-Level 8 erscheint die (0,0) Koordinate an der falschen Stelle. Vor der Drehung passte das Bild auch auf den ganzen Bildschirm, aber jetzt sieht es so aus:
Was verursacht das Problem?
* BEARBEITEN!
Das Problem wird gelöst, indem Sie die Leinwand um ihren eigenen Mittelpunkt drehen:
%Vor%Aber warum funktioniert die vorherige Version nicht mit älteren APIs?
Es ist nicht immer notwendig, dass Canvas
und Display
die gleiche Größe haben. Display.getWidth()
ist veraltet und es wird empfohlen, stattdessen Display.getSize()
zu verwenden. Aus der Dokumentation :
Ruft die Größe der Anzeige in Pixel ab.
Beachten Sie, dass dieser Wert nicht zum Berechnen von Layouts verwendet werden sollte, da a Gerät wird in der Regel Bildschirmdekoration haben (z. B. eine Statusleiste) entlang der Ränder des Displays, die den Umfang der Anwendung reduzieren verfügbarer Platz von der hier zurückgegebenen Größe. Layouts sollten stattdessen Verwenden Sie die Fenstergröße.
Verwenden Sie also bei canvas
matrix transformation immer die canvas
als Referenz und nicht die Anzeige oder das Fenster, da die Leinwand den genauen Wert angibt. Um also die Leinwand um die Mitte zu drehen, benötigen Sie den Mittelpunkt von canvas
.
Der Mittelpunkt der Zeichenfläche ist (canvas.getWidth()/2 , canvas.getHeight()/2)
Tags und Links java android android-canvas rotation