Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Detecting when ValueAnimator is done

Right now I am detecting the end of my ValueAnimator by checking when the progress has reached 100...

//Setup the animation
ValueAnimator anim = ValueAnimator.ofInt(progress, seekBar.getMax());

//Set the duration

anim.setDuration(Utility.setAnimationDuration(progress));

anim.addUpdateListener(new AnimatorUpdateListener() 
{

    @Override
    public void onAnimationUpdate(ValueAnimator animation) 
    {
        int animProgress = (Integer) animation.getAnimatedValue();

        if ( animProgress == 100)
        {
            //Done
        }

        else
        {
            seekBar.setProgress(animProgress);
        }
    }
});

Is this the correct way? I read through the docs and couldn't find any kind listener or callback for when it completes. I tried using isRunning() but it didn't work as well.

like image 899
Tyler Avatar asked Nov 27 '13 03:11

Tyler


3 Answers

You can do something like:

ValueAnimator anim = ValueAnimator.ofInt(progress, seekBar.getMax());
anim.setDuration(Utility.setAnimationDuration(progress));
anim.addUpdateListener(new AnimatorUpdateListener() 
{
    @Override
    public void onAnimationUpdate(ValueAnimator animation) 
    {
        int animProgress = (Integer) animation.getAnimatedValue();
        seekBar.setProgress(animProgress);
    }
});
anim.addListener(new AnimatorListenerAdapter() 
{
    @Override
    public void onAnimationEnd(Animator animation) 
    {
        // done
    }
});
anim.start();
like image 162
Felipe Vasconcelos Avatar answered Nov 19 '22 03:11

Felipe Vasconcelos


On Kotlin with Android KTX (Core):

animator.doOnEnd {
    // done
}
like image 32
Cristan Avatar answered Nov 19 '22 03:11

Cristan


i logged results for ValueAnimator and saw that it does not generate all values, just look this:

03-19 10:30:52.132 22170-22170/com.sample.project D/View:  next = 86
03-19 10:30:52.148 22170-22170/com.sample.project D/View:  next = 87
03-19 10:30:52.165 22170-22170/com.sample.project D/View:  next = 89
03-19 10:30:52.181 22170-22170/com.sample.project D/View:  next = 91
03-19 10:30:52.198 22170-22170/com.sample.project D/View:  next = 92
03-19 10:30:52.215 22170-22170/com.sample.project D/View:  next = 94
03-19 10:30:52.231 22170-22170/com.sample.project D/View:  next = 96
03-19 10:30:52.248 22170-22170/com.sample.project D/View:  next = 97
03-19 10:30:52.265 22170-22170/com.sample.project D/View:  next = 99
03-19 10:30:52.282 22170-22170/com.sample.project D/View:  next = 101

So asking you questuion i say to check value isn't correct way. You need add onAnimationEnd listener, described in the post

like image 1
Serg Burlaka Avatar answered Nov 19 '22 02:11

Serg Burlaka