LayoutAnimationController 在隐藏视图组时不起作用,但在显示视图组时起作用
Posted
技术标签:
【中文标题】LayoutAnimationController 在隐藏视图组时不起作用,但在显示视图组时起作用【英文标题】:LayoutAnimationController not working when hiding View Group but works when Showing view group 【发布时间】:2016-02-10 12:35:48 【问题描述】:LayoutAnimationController 用于为视图组的子级设置动画
我使用 LayoutAnimationController 用下面的代码将 LinearLayout 中的元素一一显示动画效果。
Animation fadeIn = AnimationUtils.loadAnimation(context, R.anim.anim_fade_in);
//lnrContactContainer is LinearLayout.
AnimationSet set = new AnimationSet(true);
set.addAnimation(fadeIn);
set.setDuration(500);
controller = new LayoutAnimationController(set, 1f);
lnrContactContainer.setLayoutAnimation(controller);
lnrContactContainer.setVisibility(View.VISIBLE);
但是当我用它来显示淡出动画同时隐藏 LinearLayout lnrContactContainer.setVisibility(View.GONE)
;
它隐藏了父级,而不是一个一个地隐藏子级。
【问题讨论】:
【参考方案1】:它隐藏了父级,而不是一个一个地隐藏子级。
要仅在将 Animation
应用于所有子级后隐藏父级,请使用 AnimationListener
:
lnrContactContainer.setLayoutAnimationListener(new Animation.AnimationListener()
@Override
public void onAnimationStart(Animation animation)
@Override
public void onAnimationEnd(Animation animation)
lnrContactContainer.setVisibility(View.GONE)
@Override
public void onAnimationRepeat(Animation animation)
);
顺便说一句,我需要淡出动画
set.setFillAfter(true);
虽然我的动画 xml 文件(在 res/anim 中)已经包含 android:fillAfter="true"
,但在淡出后防止项目再次弹出。
【讨论】:
set.setFillAfter(true);
感谢您指导我,我又遇到了孩子的问题。
只有一个问题,为什么我必须使用lnrContactContainer.startLayoutAnimation();
手动启动动画以隐藏ViewGroup
而不是显示它?
@Null n Void - 在我的测试应用程序中,我通过单击按钮触发了这两种类型的动画。两次都是“lnrContactContainer.setLayoutAnimation(controller);”被调用,然后动画就开始了。好的,不同之处在于我使用 ListView 而不是 LinearLayout 进行测试。所以我不知道为什么,但是 AdapterViews 和“真实”布局之间还有一些其他的区别。以上是关于LayoutAnimationController 在隐藏视图组时不起作用,但在显示视图组时起作用的主要内容,如果未能解决你的问题,请参考以下文章
android.view.animation - LayoutAnimationController 和 GridLayoutAnimationController