淡入/淡出动画是否损坏?

时间:2018-10-28 07:04:35

标签: android android-animation fade

我在使用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);
}

但是它太冗长,我不喜欢它,但是现在我坚持使用它,我只是想了解其他代码的问题。

0 个答案:

没有答案