Как мне сделать что-то, когда заканчивается анимация?
У меня есть ImageView
, который я использую для показа прогресса через AnimationDrawable
. Когда я хочу показать свой счетчик производительности, я делаю это:
animDrawable.start();
ObjectAnimator.ofFloat(view, "alpha", 1.0f).setDuration(300).start();
Когда я хочу скрыть счетчик, я делаю это:
ObjectAnimator.ofFloat(view, "alpha", 0.0f).setDuration(300).start();
animDrawable.stop();
Однако это приводит к немедленному прекращению анимации. Я бы хотел, чтобы он остановился только после того, как ObjectAnimator
полностью исчез до 0.0 альфы. Есть ли способ настроить что-то в соответствии с обратным вызовом "AnimationCompleted"?
Ответы
Ответ 1
Более современный способ сделать это - использовать ViewPropertyAnimator
:
view.animate()
.alpha(0f)
.withEndAction(new Runnable() {
@Override
public void run() {
// Do something.
}
})
.start();
Или, если вы используете RetroLambda:
view.animate()
.alpha(0f)
.withEndAction(() -> {
// Do something.
})
.start();
Ответ 2
В исходный вопрос об объекте ObjectAnimator вы можете настроить объект Animator.AnimatorListener, который определяет несколько обратных вызовов состояния анимации. Вы хотите переопределить public void onAnimationEnd (анимация аниматора)
animation.addListener(new Animator.AnimatorListener() {
@Override
public void onAnimationStart(Animator animation) {
}
@Override
public void onAnimationEnd(Animator animation) {
Toast.makeText(VideoEditorActivity.this, "animation ended", Toast.LENGTH_LONG).show();
}
@Override
public void onAnimationCancel(Animator animation) {
}
@Override
public void onAnimationRepeat(Animator animation) {
}
});
Ответ 3
Вы также можете посмотреть postOnAnimation (Runnable)
Ссылка на документы: postOnAnimation(java.lang.Runnable)