设置淡出动画不是问题,难点在于淡入动画。
对于一个组件,当我们要用一个淡出动画隐藏它时,需要设置的值包括透明度alpha和可见度visibility。我们简单的设置在动画结尾时该组件可见度为GONE即可。
但对于淡入动画,如果在设置淡入之前,已经使该组件淡出,我们首先要回调刚才设置的visibility为可见的VISIBILE,如此一来,才能使我们的淡入可见。
我们不应该像淡出动画那样,在动画结束时才设置可见度,因为组件不可见时,附加在它之上的动画自然也不可见了。此时不会是一个组件淡出,而是在动画时长结束后直接显示出该组件。
public static void fadeAnima(final View view, int visibility) {
if (visibility == View.GONE) {
// 如果需要将视图隐藏,直接启动淡出动画
view.animate()
.alpha(0f)
.setDuration(300)
.withEndAction(new Runnable() {
@Override
public void run() {
view.setVisibility(View.GONE);
}
}).start();
} else {
// 如果需要显示视图,则先把视图设置可见且alpha为0
view.setVisibility(View.VISIBLE);
view.setAlpha(0f);
view.animate()
.alpha(1f)
.setDuration(300)
.start();
}
}