以下代码用于淡出View
。它适用于Android SDK< 21。
AlphaAnimation animOut = new AlphaAnimation(1, 0); //fromAlpha, toAlpha
animOut.setDuration(500);
animOut.setAnimationListener(new Animation.AnimationListener()
{
public void onAnimationStart(Animation animation){}
public void onAnimationRepeat(Animation animation){}
public void onAnimationEnd(Animation animation)
{
view.setVisibility(View.INVISIBLE);
}
});
view.startAnimation(animOut);
奇怪的是,对于Android 5.0及更高版本,它并没有像预期的那样工作。动画开始后,动画View
立即变为不可见。
我该如何解决这个问题?
修改:如果AlphaAnimation
onAnimationEnd()
TranslateAnimation
已启动,则会出现此错误。
答案 0 :(得分:1)
您可以使用ViewPropertyAnimator。
应该使用较新的API(12+)并且您不必费心设置View
的可见性。
像这样(淡出):
view.animate().alpha(0).setDuration(500).start();
要淡入,请为您的初始Alpha值设置动画:
view.animate().alpha(1).setDuration(500).start();
要添加AnimatorListener
,您可以调用setListener()
方法:
view.animate().alpha(0).setDuration(500)
.setListener(new Animator.AnimatorListener() {
// ...
}).start();
答案 1 :(得分:0)
使用AnimationUtils。例如:
AlphaAnimation animOut = AnimationUtils.loadAnimation(this, android.R.anim.fade_out);
animOut.setDuration(500);
animOut.setAnimationListener(new Animation.AnimationListener()
{
public void onAnimationStart(Animation animation){}
public void onAnimationRepeat(Animation animation){}
public void onAnimationEnd(Animation animation)
{
view.setVisibility(View.INVISIBLE);
}
});
view.startAnimation(animOut);