AnimationDrawable, when does it end?
        Posted  
        
            by Syb
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by Syb
        
        
        
        Published on 2010-05-20T09:18:42Z
        Indexed on 
            2010/05/20
            9:20 UTC
        
        
        Read the original article
        Hit count: 262
        
android
|animations
I know there have been several people with the same question. Which is: How do i know when a frame by frame animation has ended? I have not had any useful answer on fora i visited. So i thought, let's see if they know at stackoverflow. But I could not sit still in the mean time, so i made a work around of this, but it does not really work the way i would like it to.
here is the code:
 public class Main extends Activity {
 AnimationDrawable sybAnimation;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ImageView imageView = (ImageView)findViewById(R.id.ImageView01);        
        imageView.setBackgroundResource(R.anim.testanimation);
        sybAnimation = (AnimationDrawable) imageView.getBackground();
        imageView.post(new Starter());
    }
    class Starter implements Runnable {
  public void run() {
   sybAnimation.start();
   long totalDuration = 0;
   for(int i = 0; i< sybAnimation.getNumberOfFrames();i++){
    totalDuration += sybAnimation.getDuration(i);
   }
   Timer timer = new Timer(); 
      timer.schedule(new AnimationFollowUpTimerTask(R.id.ImageView01, R.anim.testanimation_reverse),totalDuration);
  }
    }
    class AnimationFollowUpTimerTask extends TimerTask {
     private int id;
     private int animationToRunId;
     public AnimationFollowUpTimerTask(int idOfImageView, int animationXML){
      id = idOfImageView;
      animationToRunId = animationXML;
     }
  @Override
  public void run() {
         ImageView imageView = (ImageView)findViewById(id);
         imageView.setBackgroundResource(animationToRunId);
         AnimationDrawable anim = (AnimationDrawable) imageView.getBackground();
         anim.start();
  }
    }
basically I make a timertask which is scheduled with the same time as the animation to take. In that run() I want to load a new animation into the imageView and start that animation, this however does not work. Does anyone know how to get this to work, or even better, have a better way to find out when an AnimationDrawable has ended its animation?
© Stack Overflow or respective owner