Android: faites pivoter la toile autour du centre de l'écran

J'essaie de faire pivoter la toile autour du centre de l'écran, pour obtenir les coordonnées (0,0) en bas à droite.

Voici comment je le fais:

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

Il tourne correctement et tout est parfait à l'AVD avec le niveau API 17. Mais sur AVD avec niveau API 8, la coordonnée (0,0) apparaît au mauvais endroit. Avant la rotation, l'image correspond à l'écran complet de cet appareil, mais maintenant, il ressemble à ceci:

Entrez la description de l'image ici

Qu'est-ce qui cause le problème?

*MODIFIER!

Le problème est résolu en tournant la toile autour de son propre point central:

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

Mais encore, pourquoi la version précédente ne fonctionne-t-elle pas avec les anciennes API?

One Solution collect form web for “Android: faites pivoter la toile autour du centre de l'écran”

Il n'est pas toujours nécessaire que le Canvas et l' Display aient la même taille. Display.getWidth() est obsolète et il est suggéré d'utiliser Display.getSize() place. De la documentation :

Obtient la taille de l'affichage, en pixels.

Notez que cette valeur ne doit pas être utilisée pour le calcul des mises en page, car un périphérique aura généralement une décoration d'écran (telle qu'une barre d'état) le long des bords de l'affichage qui réduisent la quantité d'espace d'application disponible à partir de la taille renvoyée ici. Les mises en page doivent plutôt utiliser la taille de la fenêtre.

Donc, dans le cas d'une transformation matricielle en canvas , utilisez toujours la canvas comme référence plutôt que dans l'affichage ou la fenêtre, car la toile donnerait la valeur exacte. Donc, pour faire pivoter la toile autour du centre, vous avez besoin du centre du canvas .

Le centre de la toile est (canvas.getWidth()/2 , canvas.getHeight()/2)

  • Dessinez des animations haute résolution avec une fréquence d'images élevée sur Android
  • Dessin sur toile - PorterDuff.Mode.CLEAR dessine noir! Pourquoi?
  • Toile de visionnement personnalisée
  • Comment faire un bitmap à l'aide de la toile pouvant être cliquable?
  • PorterduffXfermode: efface une section d'un bitmap
  • Eraser n'est pas appelé lorsque le bouton est pressé
  • Comment puis-je déplacer une image d'un point à l'autre à l'aide d'Android Canvas
  • Le bouton flottant Android ne s'affiche pas
  • coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.