Android 安卓没有';如果alpha为';一开始是零

Android 安卓没有';如果alpha为';一开始是零,android,animation,view,android-animation,alpha,Android,Animation,View,Android Animation,Alpha,我正在尝试制作Android视图的alpha动画(两个动画,淡入和淡出)。默认情况下,如果视图的alpha最初为1,则一切正常。但是,我希望该视图最初是透明的,因此我将其alpha设置为零: indicatorContainer.setAlpha(0) 现在,动画无法工作。它永远不会变得可见。如果我注释掉那一行,视图最初会显示出来(我不想这样),但是当我调用它们时,我的动画工作正常。我认为这是件小事,但显然不是。我做错了什么 更新:在阅读了一些涉及setAlpha方法的API更改后,我还尝试了浮

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

indicatorContainer.setAlpha(0)

现在,动画无法工作。它永远不会变得可见。如果我注释掉那一行,视图最初会显示出来(我不想这样),但是当我调用它们时,我的动画工作正常。我认为这是件小事,但显然不是。我做错了什么


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

尝试类似的方法:

  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);
        }
    });

我遇到了同样的问题,
indicatorContainer
ImageButton
。 下面的代码修复了这个非常非常恼人的问题

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

您可以尝试以下更简单的方法:


view.animate().alpha(1).setDuration(动画持续时间)

以下是我是如何解决这个问题的——不是特别优雅,但可以管理:

  • 将视图设置为所需的初始alpha 0.0f或其他值

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


  • 当动画重复时,我仍然感到有些不安,但这种方法可能适用于动画不重复的场景

    这可能与OP无关,但我想我还是会分享它,因为它可能会在将来帮助别人

    请注意,如果初始动画将
    animate().alpha(0.0f)
    与视图的Y轴或X轴平移操作相结合(例如
    animate().translationYBy(500)
    则必须在淡入前重置此属性(使用
    animate().alpha(1.0f)

    我遇到了这篇文章,因此我认为将alpha设置回
    1.0f
    是失败的,而实际上它仍然正常工作,但动画是在屏幕外发生的,因为我没有重置我的Y轴平移(荷马·辛普森*doh*时刻)

    为了方便地解决此问题,您可以在动画结束时(如上面提到的@Nikhil Verma)向动画添加一个
    AnimatorEndListener
    ,您可以添加一行代码来重置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
    ,它可以按预期工作。

    我使用的是这样的简单动画:`animation animation=new alphanimation(indicatorContainer.getAlpha(),1f);animation.setFillAfter(true);animation.setDuration(200);indicatorContainer.startAnimation(animation);`没有办法吗?尝试在布局xml中将visibility属性设置为不可见。在启动alpha动画调用(您的视图)之前。setVisibility(view.VISIBLE);它是这样工作的。知道为什么它不工作吗?