我有一个GridView
,当按下一个按钮时,我希望所有元素一次淡出一个(或淡入,如果它们已经不可见)。在最后的淡出,我有:
Animation fadeIn = AnimationUtils.loadAnimation(activity, R.anim.fade_in);
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(fadeIn);
gridView.setLayoutAnimation(layoutAnimationController);
gridView.setVisibility(View.VISIBLE);
按预期工作。 GridView中的每个视图一次淡入一个,然后整个GridView可见。在淡出结束时,虽然类似的东西可能会起作用:
Animation fadeOut = AnimationUtils.loadAnimation(activity, R.anim.fade_out);
LayoutAnimationController layoutAnimationController = new LayoutAnimationController(fadeOut);
gridView.setLayoutAnimation(layoutAnimationController);
gridView.setVisibility(View.INVISIBLE);
但是,这只会使GridView立即消失,不会发生动画,它只会变得不可见。为什么是这样?我想我看到了一种扩展LayoutAnimationController
的方法,其中我可以指定动画之后的可见性,但是有更简单的方法来获得我想要的淡出效果吗?
我意识到一种方法是手动为屏幕上可见的每个视图编写所有动画,但如果这可以通过LayoutAnimationController实现,那显然要好得多。
编辑:我的问题的主旨:onButtonPressed,我希望GridView中的视图一次淡出一个,并且整个GridView在动画结束时不可见。
答案 0 :(得分:0)
一旦设置了可见性,它就立即改变(好吧,一旦UI线程返回到Looper)。如果您希望它在动画后不可见,则需要在动画完成之前不设置可见性。可能会制作动画集的最后一帧就足够了。
答案 1 :(得分:0)
您需要实现AnimationListener,然后在动画完成后调用setVisibilty(View.INVISIBLE)
。您必须这样做,因为在完成代码后将其设置为不可见是正常的。所以它隐藏了它的动画。
public class YourClass extends Foo implements AnimationListener {
//...
@Override
public void onAnimationEnd(Animation a) {
// Do stuff.
// SET INVISBLE HERE
}
@Override
public void onAnimationRepeat(Animation a) {
}
@Override
public void onAnimationStart(Animation a) {
}
}
正如在上面提到的聊天中,您还可以在动画上添加AnimationListener,如:
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});