Событие конец анимации андроид
У меня есть затухающая анимация в представлении (которая находится внутри фрагмента), и каждый раз, когда анимация происходит, после ее завершения представление перерисовывается снова. Я нашел работу вокруг делать view.SetVisibility(View.GONE)
. Но он не ждет, пока анимация закончится. Я хотел бы выполнить этот код setVisibility только после завершения анимации. Каков наилучший способ сделать это?
5 ответов:
вы можете добавить прослушиватель анимации к объекту анимации, например
anim.setAnimationListener(new Animation.AnimationListener(){ @Override public void onAnimationStart(Animation arg0) { } @Override public void onAnimationRepeat(Animation arg0) { } @Override public void onAnimationEnd(Animation arg0) { } });
функционально то же самое, что и принятый ответ, но в гораздо более сжатом виде:
/* Add/Remove any animation parameter */ theView.animate().alpha(0).setDuration(2000).withEndAction(new Runnable() { @Override public void run() { theView.setVisibility(View.GONE); } });
наслаждайтесь :)
вы также можете достичь этого с помощью анимация.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 } })