У меня есть затухающая анимация в представлении (которое находится внутри фрагмента), и каждый раз, когда анимация происходит, после ее завершения представление снова перерисовывается. Я нашел работу view.SetVisibility(View.GONE)
. Но он не дожидается завершения анимации. Я хотел бы выполнить этот код setVisibility только после завершения анимации. Как лучше всего это сделать?
android
android-fragments
android-animation
Пауло Баррос
источник
источник
Ответы:
Вы можете добавить прослушиватель анимации к своему объекту анимации, например
anim.setAnimationListener(new Animation.AnimationListener(){ @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { } });
источник
if (!anim.hasStarted() || anim.hasEnded())
чтобы определить, выполняется ли еще анимация.Функционально такой же, как принятый ответ, но гораздо более кратко:
// Add/Remove any animation parameter theView.animate() .alpha(0) .setDuration(2000) .withEndAction(new Runnable() { @Override public void run() { theView.setVisibility(View.GONE); } });
Наслаждаться :)
источник
.withEndAction(() -> theView.setVisibility(View.GONE));
Вы также можете добиться этого с помощью Animation.setFillAfter
источник
Просто возьмите объект анимации и добавьте к нему слушателя анимации. Вот пример кода:
rotateAnimation.setAnimationListener(new AnimationListener() { @Override public void onAnimationStart(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationRepeat(Animation animation) { // TODO Auto-generated method stub } @Override public void onAnimationEnd(Animation animation) { // TODO Auto-generated method stub **// WRITE HERE WHATEVER YOU WANT ON THE COMPLETION OF THE ANIMATION** } });
источник
Пример для Котлина
var fadeOutImage = findViewById<ImageView>(R.id.fade_out_Image) val fadeOutAnimation = R.anim.fade_out_animation val animation = AnimationUtils.loadAnimation(this, fadeOutAnimation) fadeOutImage.startAnimation(animation) animation.setAnimationListener(object : Animation.AnimationListener { override fun onAnimationStart(p0: Animation?) { // not implemented } override fun onAnimationRepeat(p0: Animation?) { // not implemented } override fun onAnimationEnd(p0: Animation?) { fadeOutImage.visibility = View.INVISIBLE } })
источник
fade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()