我在使用 Android 动画时遇到了一些非常奇怪的行为,我想了解发生了什么。
我ImageView
在 xml 中是不可见的,我没有设置alpha
.
这段代码应该是淡入/淡出使我的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);
}
但它太冗长了,我不喜欢它,但现在我坚持使用它,我只是想了解其他代码有什么问题。