Aller au contenu

Besoin d'aide : Animation dans canvas


webastien

Recommended Posts

Bonsoir,

Je débute dans la programmation Android et j'essaie d'afficher un sprite animé dans un canvas. J'arrive à afficher des sprites "simples" (des PNGs), mais je ne sais pas comment faire de même avec des animations... Voilà le code que j'utilise :

public class CustomDrawableView extends View {
 private ShapeDrawable mDrawable;
 private Bitmap        simple, anime;
 private Paint         mPaint;
 private Matrix        mMatrix;

 public CustomDrawableView(Context context) {
   super(context);

   simple = BitmapFactory.decodeResource(getResources(), R.drawable.simple_png);
   anime = BitmapFactory.decodeResource(getResources(), R.anim.anime_xml);

   mDrawable = new ShapeDrawable();
   mMatrix = new Matrix();
   mPaint = new Paint();
   Canvas mCanvas = new Canvas();

   mDrawable.draw(mCanvas);
 }

 protected void onDraw(Canvas canvas) {
   canvas.drawColor(Color.BLACK);
   canvas.setMatrix(mMatrix);
   mPaint.setColor(Color.WHITE);

   canvas.drawBitmap(simple, 0f, 0f, mPaint);
   // Si je laisse cette ligne, l'application plante...
   canvas.drawBitmap(anime, 0f, 0f, mPaint);

   mDrawable.draw(canvas);
 }
}

Y a-t-il un moyen d'obtenir ce que je veux ou faut-il ne pas utiliser d'animations XML et gérer soit même l'affichage des images une à une ?

Si vous avez des suggestions ou des liens à partager, je suis preneur. Merci d'avance.

Lien vers le commentaire
Partager sur d’autres sites

Je me réponds à moi-même, mais si vous avez d'autres méthodes, ça m'intéresse également : L'utilisation d'animations XML dans mon cas ne semblent pas être une bonne pratique, mais je ne connais pas encore les bonnes donc il y a peut-être plus propre, plus optimisé ou encore plus "android"...

Le plus simple semble être l'utilisation d'une image contenant les différentes frames, en les alternant programmatiquement avec la méthode suivante :

canvas.drawBitmap(bitmap, sourceRect, destRect, paint);

bitmap étant la ressource image, passée par BitmapFactory.decodeResource(), sourceRect, un "Rect" initialisé avec "new Rect(0, 0, w, h)" (w et h étant la largeur et la hauteur du bitmap) et destRect un "Rect" n'incluant que la frame désirée.

Lien vers le commentaire
Partager sur d’autres sites

Archivé

Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.

×
×
  • Créer...