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