Dessiner des bitmaps en miroir dans Android

J'essaie d'apprendre comment faire un sprite animé dans Android et je ne peux pas comprendre comment organiser mes bitmaps. J'ai une feuille de sprite de mon personnage marchant vers la droite: un bitmap de cinq copies d'un personnage, également espacé (toutes les 45px), dans un cycle de marche.

J'ai prévu de dessiner chaque image en dessinant une petite partie de mon bitmap de feuille de sprite à la fois en allant:

  • Android Fond blanc lorsque le clavier disparaît
  • Comment exécuter une application Android sur l'appareil avec une fourmi
  • Beaucoup de NPE de DeviceMotionService ont eu lieu récemment
  • Comment puis-je ajouter une nouvelle ligne à un TextView dans Android?
  • Insérer une nouvelle intention de contact
  • Qu'est-ce que MergeRootFrame dans FrameLayout?
  • Rect sourceRect = new Rect(0, 0, 45, 75); canvas.drawBitmap(spriteSheetBitmap, sourceRect, new Rect(0, 0, 45, 75), null); 

    Ensuite, pour les cadres suivants, augmentez "sourceRect.x" par 45, puis redessinez, et ainsi de suite.

    Cependant, je ne sais maintenant pas comment faire en sorte que mon sprite marche vers la gauche. J'avais d'abord pensé que je pouvais simplement réfléchir mon rectangle dont je dessine pour avoir une image retournée. Quelque chose comme:

     sourceRect = new Rect(45, 0, 0, 75); 

    Qui ne semble pas fonctionner (pas sûr de ce qui se passe réellement ici, mais rien n'est attiré sur ma surface).

    En recherche en ligne, il me semble que je devrais faire une copie de mon bitmap d'origine, le miroiter avec une matrice de transformation, puis utiliser ce bitmap pour le dessin en marchant vers la gauche. Cependant, j'ai également trouvé des implémentations où de nombreux objets de bitmap plus petits sont créés à partir de la feuille de sprite d'origine, stockés (et transformés pour le mouvement en miroir), puis utilisés au besoin.

    Je me demande donc quel serait le meilleur dans ce cas ou s'il y a vraiment une différence (performance / mémoire):

    Méthode 1: Charger dans ma feuille de sprite d'origine, créer une nouvelle instance de bitmap, la miroir, puis calculer tous les rectangles et utiliser ces + deux feuilles entières à dessiner (certes, il existe un espace de bitmap supplémentaire dans lequel la feuille de sprite n'est pas utilisée) .

    Méthode 2: Charger dans ma feuille de sprite d'origine, pour chaque trame, créez deux nouveaux objets bitmap (1 miroir, 1 normal) et stockez ceux à partir duquel vous souhaitez dessiner.

    Méthode 3: D'autres moyens meilleurs?

  • Android - Mettre à jour Bitmap à partir du thread de la minuterie
  • Java.lang.SecurityException: tenter de lire les gservices sans autorisation
  • FragmentTransaction.replace () ne fonctionne pas
  • Densité abstraite de l'écran LCD
  • Studio Android non rendu aperçu de la mise en page
  • Google Analytics ne montre pas l'utilisateur actif dans l'aperçu en temps réel
  • 3 Solutions collect form web for “Dessiner des bitmaps en miroir dans Android”

    La méthode 2 serait beaucoup trop coûteuse, et vous n'avez pas besoin d'une toile pour basculer un bitmap. Créez simplement un autre bitmap avec Matrix appliqué, de la manière suivante:

     BitmapDrawable flip(BitmapDrawable d) { Matrix m = new Matrix(); m.preScale(-1, 1); Bitmap src = d.getBitmap(); Bitmap dst = Bitmap.createBitmap(src, 0, 0, src.getWidth(), src.getHeight(), m, false); dst.setDensity(DisplayMetrics.DENSITY_DEFAULT); return new BitmapDrawable(dst); } 

    Pour réfléchir votre sprite, appliquez simplement la transformation suivante sur le volet: échelle (-1, 1). Vous devrez également compenser le sprite par sa largeur.

    Pour dessiner une barre de bitmap en miroir vertical sur un canvas :

     Matrix m = new Matrix(); // Mirror is basically a rotation m.setScale( -1 , 1 ); // so you got to move your bitmap back to it's place. otherwise you will not see it m.postTranslate(canvas.getWidth(), 0); canvas.drawBitmap(bmp, m, p); 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.