webastien Posté(e) 26 mai 2011 Share Posté(e) 26 mai 2011 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 More sharing options...
webastien Posté(e) 26 mai 2011 Auteur Share Posté(e) 26 mai 2011 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 More sharing options...
Recommended Posts
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.