[英]How to change visibility of individual Views as layoutAnimationController animates them?
我有一个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
的方法,其中可以指定动画后的可见性,但是有没有更简单的方法来获得我想要的淡出效果?
编辑:所以基本上,随着每个视图都具有特定动画的动画,我希望它将状态更改为“可见”或“不可见”,我想如果GridView的全部内容都是不可见的,我真的不在乎GridView本身是不可见的。 出于某种原因,这是我在fadeIn上获得的确切行为,但是在fadeOut上,效果却不尽人意,我猜测fadeIn的工作只是一个愚蠢的巧合,实际上有一种更好的方法。
我意识到一种方法是为屏幕上可见的每个View手动编写所有动画,但是如果可以通过LayoutAnimationController实现,那显然更好。
编辑:我的问题的关键:onButtonPressed,我希望GridView中存在的视图一次淡出一个,而整个GridView在动画结束时不可见。
设置可见性后,它会立即更改(以及,一旦UI线程返回到Looper,它就会立即更改)。 如果希望在动画之后使其不可见,则无需在动画完成之前设置可见性。 可能使动画集的最后一帧就足够了。
您需要实现一个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) {
}
}
如聊天中所述,您还可以在Animation上添加AnimationListener,例如:
fadeOut.setAnimationListener(new Animation.AnimationListener() {
@Override
public void onAnimationStart(Animation animation) {
}
@Override
public void onAnimationEnd(Animation animation) {
}
@Override
public void onAnimationRepeat(Animation animation) {
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.