2012-04-03 25 views
1

我使用从这里代码显示的LinearLayout的展开/折叠动画:https://stackoverflow.com/a/5122460/458603动画没有开始元素时高度= 0

Animation quickEntryAnimation = new HeightAnimation(mQuickEntryArea, DisplayHelper.dpToPixel(200, this), mQuickEntryArea.getHeight() < 10); 
quickEntryAnimation.setDuration(300); 
mQuickEntryArea.startAnimation(quickEntryAnimation); 
mQuickEntryArea.invalidate(); 

它缩短了就好了,但每当mQuickEntryArea的高度为0,它只有在某些事情导致整个视图重新布局之后才会扩大(例如点击屏幕)。发生了什么?

+0

你有没有设法解决它?我确实有同样的问题。谢谢。 – Yar 2012-04-27 18:14:20

+1

但无论如何感谢你提到高度0我改变它为1,现在它似乎工作。 – Yar 2012-04-27 18:19:52

+0

哈哈是的,这就是我在此期间做的事情:P我从未看过这个项目:)如果你找到解决方案,请发帖! – manmal 2012-04-27 18:31:06

回答

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

问候, 大卫