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