我在这里使用代码来显示LinearLayout的展开/折叠动画:https://stackoverflow.com/a/5122460/458603
Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10);
quickEntryAnimation.setDuration(300);
mQuickEntryArea.startAnimation(quickEntryAnimation);
mQuickEntryArea.invalidate();
它可以很好地折叠,但是只要mQuickEntryArea的高度为0,它只会在某些东西导致整个视图重新布局(例如点击屏幕)后才会扩展。发生了什么?
最佳答案
在像这样开始动画之前,尝试调用requestLayout()
:
Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10);
quickEntryAnimation.setDuration(300);
mQuickEntryArea.requestLayout();
mQuickEntryArea.startAnimation(quickEntryAnimation);
至少对我来说,它可以解决问题。
更新:我只是检查了另一个星座,这不能正常工作。我深入研究了
View
类的呈现代码,并发现有多个呈现过程。一个激活的动画实际上是由视图的父级触发的。如果上述解决方案对您不起作用,请尝试执行以下操作:mQuickEntryArea.startAnimation(quickEntryAnimation);
((ViewGroup) mQuickEntryArea.getParent()).invalidate();
请注意,父级不必是
ViewGroup
!问候,
大卫