繁体   English   中英

如何在layoutAnimationController设置动画时更改各个View的可见性?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM