0

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

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

4

0 回答 0