【问题标题】:Animation not starting on element when height=0高度 = 0 时动画未在元素上开始
【发布时间】:2013-11-07 22:46:05
【问题描述】:

我正在使用此处的代码来显示 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,我将其更改为 1,现在它似乎可以工作了。
  • 哈哈是的,这就是我在此期间所做的:P 从那时起我就没有研究过这个项目 :) 如果你找到解决方案,请发布!

标签: android animation


【解决方案1】:

在像这样开始动画之前尝试调用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

您好, 大卫

【讨论】:

    猜你喜欢
    • 2017-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-21
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 2017-04-17
    相关资源
    最近更新 更多