У меня есть анимация затухания в представлении (которое находится внутри фрагмента), и каждый раз, когда происходит анимация, после ее завершения представление снова перерисовывается. Я нашел способ сделать view.SetVisibility(View.GONE)
. Но он не ждет окончания анимации. Я хотел бы выполнить этот код setVisibility только после завершения анимации. Как лучше всего это сделать?
Конец события анимации android
comment
Опубликуйте свой код, как вы показываете анимацию....
- person Lalit Poptani   schedule 30.09.2011
Ответы (5)
Вы можете добавить прослушиватель анимации к вашему объекту анимации, например
anim.setAnimationListener(new Animation.AnimationListener(){
@Override
public void onAnimationStart(Animation arg0) {
}
@Override
public void onAnimationRepeat(Animation arg0) {
}
@Override
public void onAnimationEnd(Animation arg0) {
}
});
person
blessenm
schedule
30.09.2011
Если вы хотите предотвратить повторный запуск анимации затухания во время ее выполнения, используйте
if (!anim.hasStarted() || anim.hasEnded())
, чтобы определить, выполняется ли анимация.
- person theczechsensation; 28.12.2014
Функционально то же, что и принятый ответ, но гораздо более лаконично:
// Add/Remove any animation parameter
theView.animate()
.alpha(0)
.setDuration(2000)
.withEndAction(new Runnable() {
@Override
public void run() {
theView.setVisibility(View.GONE);
}
});
Наслаждаться :)
person
Antzi
schedule
29.09.2016
Четко и однострочно. Топ ответ! Можно упростить с помощью лямбда
.withEndAction(() -> theView.setVisibility(View.GONE));
- person theBugger; 04.10.2016
Имейте в виду, что это уровень API 16 (4.1) и выше.
- person Tommie; 28.12.2016
Удивительное решение, мой друг. Спасибо!
- person Vlad Ivchenko; 17.03.2018
Важная информация: действие выполняется только в том случае, если анимация завершается нормально, если ViewPropertyAnimator отменяется во время этой анимации, исполняемый объект не запускается.
- person Sarthak_ssg5; 07.06.2019
Работает как шарм, в том числе при использовании компонента навигации в runnable. (Прослушиватель анимации всегда аварийно завершал работу, когда я перемещался с помощью компонента навигации.)
- person Luigi_Papardelle; 21.01.2020
Это ответ, который я искал некоторое время!
- person coolcool1994; 04.08.2020
Вы также можете добиться этого, используя Animation.setFillAfter а>
person
Pavan
schedule
30.09.2011
Просто возьмите объект анимации и добавьте к нему прослушиватель анимации. Вот пример кода:
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**
}
});
person
Gaurav Arora
schedule
03.06.2013
Пример для Котлина
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
}
})
person
richc
schedule
27.03.2018
вы можете сохранить некоторые строки, используя
fade_out_Image.animate().alpha(0f).setDuration(100L).withEndAction {fade_out_Image.visibility = View.GONE}.start()
- person longi; 18.07.2019