我使用此处的代码显示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时,它只会在某些东西导致整个视图重新布局(例如点击屏幕)后才会展开。发生了什么事?
答案 0 :(得分:3)
在开始动画之前尝试调用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
!
问候, 大卫