Android: Leinwand in der Mitte des Bildschirms drehen

8

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?

    
IAM 03.08.2013, 01:31
quelle

1 Antwort

0

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)

    
Henry 11.11.2015 10:35
quelle