我正在尝试动画alpha
Android视图(两个动画,淡入和淡出)。默认情况下,如果视图的alpha最初为1,则一切正常。但是,我希望该视图最初是透明的,因此我将它的alpha设置为零:
indicatorContainer.setAlpha(0);
现在,动画无法奏效。它永远不会变得可见。如果我注释掉那一行,最初会显示视图(我不想要),但是当我调用它们时,我的动画效果很好。我虽然它是微不足道的但显然不是。我做错了什么?
更新:在阅读了涉及0f
方法的一些API更改后,我还尝试了浮点0
而不是整数setAlpha
我的电话可能正在调用不正确的过载,但没有任何改变。
答案 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)
我遇到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);
答案 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)
以下是我能够解决这个问题的方法 - 不是特别优雅,但可以管理:
将视图设置为您想要的初始alpha值0.0f或其他。
当事件发生时,您需要视图具有更多(或更少)可见性/ alpha - 例如,在您开始动画之前 - 此时您可以更新alpha,然后在图
当动画重复时,我仍然会有些不稳定,但这种方法可能适用于不重复动画的场景