2012-02-22 7 views
0

J'essaie de comprendre comment je peux démarrer et arrêter l'animation dans mon application Android.Démarrage et arrêt de l'animation

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    stopOneButton = (Button) findViewById(R.id.buttonStopOne); 
    stopTwoButton = (Button) findViewById(R.id.buttonStopTwo); 
    stopThreeButton = (Button) findViewById(R.id.buttonStopThree); 
    startButton = (Button) findViewById(R.id.buttonStart); 

    firstImage = (ImageView) findViewById(R.id.imageView1); 

    firstImage.setBackgroundResource(R.drawable.spin_animation); 

    frameAnimation = new AnimationDrawable(); 
    AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground(); 
// frameAnimation.start(); 

    firstImage.post(new Starter()); 

    stopOneButton.setOnClickListener(this); 
    stopTwoButton.setOnClickListener(this); 
    stopThreeButton.setOnClickListener(this); 
    startButton.setOnClickListener(this); 

} 

class Starter implements Runnable { 

    public void run() { 
     frameAnimation.start(); 
    } 

} 

C'est à peu près tout ce que j'ai, et im à partir de zéro sans se lier les boutons à la fonctionnalité, mais l'image ne tourne pas autour du tout.

Ceci est mon fichier XML pour le drawable:

<?xml version="1.0" encoding="utf-8"?> 
<animation-list 
    xmlns:android="http://schemas.android.com/apk/res/android" 
    android:oneshot="false"> 
    <item android:drawable="@drawable/image1" android:duration="500" /> 
    <item android:drawable="@drawable/image2" android:duration="500" /> 
    <item android:drawable="@drawable/image3" android:duration="500" /> 
    <item android:drawable="@drawable/image4" android:duration="500" /> 
</animation-list> 

code plus pour les boutons:

@Override 
public void onClick(View v) { 
    switch(v.getId()) { 
     case R.id.buttonStopOne: 

     break; 

     case R.id.buttonStopTwo: 
     break; 

     case R.id.buttonStopThree: 
     break; 

     case R.id.buttonStart: 
      frameAnimation.start(); 
     break; 
    } 
} 

Quelqu'un peut-il déterminer ce qui im ​​faire le mal?

Répondre

0

Vous devez appliquer l'animation à une vue. Donc, en supposant firstImage() est l'animation que vous souhaitez animer, appelez firstImage.startAnimation(frameAnimation). Ensuite, pour terminer, appelez le firstImage.clearAnimation().

EDIT:

Ok. Maintenant que je vois ce que vous faites, je suppose que le Runnable que vous utilisez n'est jamais appelé. Ce que vous pouvez essayer est d'attendre que la vue ait été complètement gonflée et de démarrer l'animation. Quelque chose comme ceci:

firstImage = (ImageView) findViewById(R.id.imageView1); 
final AnimationDrawable frameAnimation = (AnimationDrawable) firstImage.getBackground(); 
ViewTreeObserver treeObserver = firstImage.getViewTreeObsver(); 
treeObvserver.addOnGlobalLayoutListener(new OnGlobalLayoutListener(){ 
    @Override 
    public void onGlobalLayout(){ 
     frameAnimation.start(); 
    } 
} 

Maintenant, je n'ai pas essayé, mais ce que je pense va se passer est quand la vue est complètement gonflé et visible, l'animation commencera.

Side note: It's also a handy way to figure out when the views have their dimensions.

+0

Je trouve cela un peu confus, ne 'frameAnimation.start();' ne démarre pas mon animation? – JavaCake

+0

Une autre façon de démarrer une animation est d'appeler 'setAnimation' sur' View', de passer dans l'animation, puis d'appeler 'start()' sur l'animation elle-même. Donc dans votre cas ce serait 'firstimage.setAnimation (frameAnimation);' quelque part dans l'ensemble. Puis, quand vous voulez que l'animation joue, 'frameAnimation.start()'. Je suis presque certain que la raison pour laquelle il n'anime pas est que l'animation ne fait référence à aucune vue. – DeeV

+0

pouvez-vous signaler une erreur dans mon code actuel? – JavaCake

Questions connexes