当height = 0时,动画不在元素上开始

时间:2012-04-03 15:48:01

标签: android animation

我使用此处的代码显示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时,它只会在某些东西导致整个视图重新布局(例如点击屏幕)后才会展开。发生了什么事?

1 个答案:

答案 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

问候, 大卫