我在这里使用代码来显示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

问候,
大卫

10-04 19:36