Я получаю очень странное поведение с Android-анимацией и хочу понять, что происходит.
Мой ImageView
невидим в xml, и я не устанавливаю alpha
.
Этот код должен был Fade In / Out сделать мой ImageView
, но он ничего не оживляет и идет прямо к конечному эффекту:
if (isFadeIn) {
myImage.animate().alpha(1.0f).setDuration(5000).withStartAction(() -> {
myImage.setVisibility(View.VISIBLE);
myImage.setAlpha(0.0f);
});
} else {
myImage.animate().alpha(0.0f).setDuration(5000)
.withEndAction(() -> myImage.setVisibility(View.INVISIBLE));
}
Теперь этот код исчезает и исчезает ...... НО в первый раз, когда он запускается, он не исчезает, а затухание всегда мигает:
if (isFadeIn) {
myImage.animate().alpha(1.0f).setDuration(5000).withStartAction(() -> {
myImage.setVisibility(View.VISIBLE);
myImage.setAlpha(0.0f);
}).withEndAction(() -> myImage.setAlpha(1.0f));
} else {
myImage.animate().alpha(0.0f).setDuration(5000)
.withStartAction(() -> {
myImage.setAlpha(1.0f);
myImage.setVisibility(View.VISIBLE);
})
.withEndAction(() -> myImage.setVisibility(View.INVISIBLE));
}
Я часами ломаю голову, пытаясь понять, почему возникает такое поведение.
Теперь, этот код работает:
fadeInAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
myImage.setVisibility(View.VISIBLE);
}
@Override public void onAnimationEnd(Animation animation) { }
@Override public void onAnimationRepeat(Animation animation) { }
});
fadeOutAnimation.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) { }
@Override public void onAnimationEnd(Animation animation) {
myImage.setVisibility(View.INVISIBLE);
}
@Override public void onAnimationRepeat(Animation animation) { }
});
fadeInAnimation.setDuration(5000);
fadeOutAnimation.setDuration(5000);
...
if (isFadeIn) {
myImage.startAnimation(fadeInAnimation);
} else {
myImage.startAnimation(fadeOutAnimation);
}
Но это слишком многословно, мне это не нравится, но сейчас я придерживаюсь этого, я просто хотел понять, что не так сдругой код.