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: 214

Filed under:
|

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

Related posts about android

Related posts about animations