2012-07-30 2 views
0

J'essaie de trouver comment faire png animation image par image à un bon taux de trame ...Comment faire une animation image par image sur Android?

J'ai un tas de pngs (probablement 1500 png poses) et je dois les jouer un- by-one (juste comme une application parlante, prendre tom cat comme exemple)

J'ai déjà essayé SurfaceView, normal View, AnimationDrawable et aussi ImageView (avec un fil réglant l'arrière-plan avec un sommeil (33) [pour un 30fps]), mais aucune de ces façons fait un bon taux de trame par rapport à Tom Cat sur les mauvais téléphones CPU (comme HTC Desire A).

C'est également bon de dire que j'ai déjà ajouté des options pour configurer le SampleSize pour les images, au cas où il aurait besoin de plus de mémoire ou de vitesse de traitement.

Je pense que la façon unique chargement jusqu'à un montant de PNGs, tirer sur le SurfaceView et alors qu'il joue charge plus PNGs et recycler les autres bitmaps ...

Tout le monde peut me aider? Au moins avec du code?

Merci!

Répondre

0

ici vous allez ... essayer ... :) créer un fichier XML comme celui-ci sur les valeurs ur dossier

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
<array name="frames"> 
    <item>@drawable/pak1_1</item> 
    <item>@drawable/pak1_2</item> 
    <item>@drawable/pak1_3</item> 
    <item>@drawable/pak1_4</item> 
    <item>@drawable/pak1_5</item> 
</array> 
</resources> 

Maintenant, essayez ce code:

public void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main); 
      Resources res = getResources(); 
      TypedArray FrameImages = res.obtainTypedArray(R.array.frames); 
      animation = new AnimationDrawable(); 
      for (int i = 0; i < 1500; i++) { 
       Drawable drawable = FrameImages.getDrawable(i); 
       animation.addFrame(drawable, 33); 
      } 
      animation.setOneShot(false); 
      ImageView imageAnim = (ImageView) findViewById(R.id.img); 
      imageAnim.setBackgroundDrawable(animation); 
      // run the start() method later on the UI thread 
      imageAnim.post(new Starter()); 
     } 

     class Starter implements Runnable { 
      public void run() { 
       animation.start();   
      } 
     } 
bien
+0

, ive déjà utilisé le AnimationDrawable ... c'est lent quand vous ajoutez une image de fond en dessous de l'ImageView, elle déborde aussi de la mémoire, à cause de trop de png ... – user1247870

+0

Et, cette stratégie se bloque après 30 images. c'est à dire. 30 éléments dans la liste d'animation –

Questions connexes