如果Android最初为零,则不会为alpha设置动画

时间:2015-04-06 14:32:53

标签: android animation view android-animation alpha

我正在尝试动画alpha Android视图(两个动画,淡入和淡出)。默认情况下,如果视图的alpha最初为1,则一切正常。但是,我希望该视图最初是透明的,因此我将它的alpha设置为零:

indicatorContainer.setAlpha(0);

现在,动画无法奏效。它永远不会变得可见。如果我注释掉那一行,最初会显示视图(我不想要),但是当我调用它们时,我的动画效果很好。我虽然它是微不足道的但显然不是。我做错了什么?

更新:在阅读了涉及0f方法的一些API更改后,我还尝试了浮点0而不是整数setAlpha我的电话可能正在调用不正确的过载,但没有任何改变。

5 个答案:

答案 0 :(得分:12)

尝试这样的事情:

  mRelativeLayout.setAlpha(0f);
    mRelativeLayout.animate().alpha(1f).setDuration(500).setListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            super.onAnimationEnd(animation);
            mRelativeLayout.setVisibility(View.VISIBLE);
            //OR
            mRelativeLayout.setAlpha(1f);
        }
    });

答案 1 :(得分:2)

我遇到indicatorContainerImageButton的同一问题。 下面的代码修复了这个非常烦人的问题...

// XXX: Does not work if just 0. It calls `ImageView#setAlpha(int)` deprecated method.
indicatorContainer.setAlpha(0.0f);
ViewCompat.animate(indicatorContainer).alpha(1);

答案 2 :(得分:1)

可以尝试一下,一种更简单的方法:

view.animate()α(1).setDuration(ANIMATION_DURATION);

答案 3 :(得分:1)

这可能与OP无关,但我认为我会分享它,因为这可能会在将来帮助某个人。

请注意,如果您是初始动画,则将animate().alpha(0.0f)与View的Y轴或X轴平移结合使用(例如,animate().translationYBy(500),则必须先重置此属性,然后再淡入(使用animate().alpha(1.0f)

我碰到了这样的帖子,以为将alpha重新设置为1.0f失败了,但实际上它仍然可以正常工作,但是动画发生在屏幕外,因为我没有重置Y-轴平移(荷马·辛普森*道奇*时刻)。

为方便地解决此问题,您可以在动画完成时向其添加AnimatorEndListener(如上面提到的@Nikhil Verma),您可以在其中添加一行代码以重置X / Y轴平移。

在我遇到的场景中,我希望动画向下浮动并逐渐消失,因此相应地调整了Y轴和Alpha。在它漂浮并消失后,我设置了一个侦听器以重置Y轴平移,如下所示:

 loadingMask.animate().translationYBy(500); //starts animation by moving it down the screen
        loadingMask.animate().alpha(0.0f) //fades out
        .setDuration(1500) //over 1.5s
        .setListener(new AnimatorEndListener() { //when animation completes
            @Override
            public void onAnimationEnd(Animator animation) {
                loadingMask.setTranslationY(0); //reset the y axis translation
            }
        });

现在,当我要再次重复动画时,可以将“视图”的Alpha设置为1.0f,它可以按预期工作。

答案 4 :(得分:0)

以下是我能够解决这个问题的方法 - 不是特别优雅,但可以管理

  1. 将视图设置为您想要的初始alpha值0.0f或其他。

  2. 当事件发生时,您需要视图具有更多(或更少)可见性/ alpha - 例如,在您开始动画之前 - 此时您可以更新alpha,然后在图

  3. 当动画重复时,我仍然会有些不稳定,但这种方法可能适用于不重复动画的场景