【问题标题】:How to undo changes made by animate()?如何撤消 animate() 所做的更改?
【发布时间】:2015-11-30 04:10:40
【问题描述】:

可以使用animate() 撤消他对视图属性所做的更改吗?

特别是,如何撤消使用animate().yBy(x) 所做的更改?

请注意,我尝试使用animate().yBy(-x),它在大多数情况下都有效,但有时由于某种原因animate().yBy(x) 似乎没有正确完成(尤其是当片段暂停然后恢复时)所以animate().yBy(-x)正在过度移动视图。

我正在寻找一种方法,让 View 将其属性重置为使用 animate() 更改它们之前的状态。

【问题讨论】:

  • 试试view.animate().yBy(-x),而不是view.animate().yBy(-1.0f*view.getTranslationY())。
  • @CommonsWare 虽然这不是一般地回答问题,但这似乎是我需要的正确方向,请发布答案以便我标记它。谢谢。

标签: android animation


【解决方案1】:

xBy() 和 yBy() 动画会影响 translationX 和 translationY 属性。您可以通过getTranslationX() 和getTranslationY() 获取这些属性的当前值。因此,要撤消之前的动画,请将当前属性值乘以 -1 并为其设置动画。或者,如果您正在寻求“粉碎”跳跃(无动画),只需致电 setTranslationX(0) 或 setTranslationY(0)。

【讨论】:

  • 那么translationYBy()和yBy()的区别是什么?
  • @OfekRon:这是一个很好的问题,我没有答案。
【解决方案2】:

通过使用插值器我们可以反转动画:

public class InverAnim implements Interpolator {
    @Override
    public float getInterpolation(float paramFloat) {
        return Math.abs(paramFloat -1f);
    }
}

您可以在动画上设置新的插值器:

myAnimation.setInterpolator(new InverAnim());

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-19
    • 1970-01-01
    • 2016-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-11
    • 2016-12-07
    相关资源
    最近更新 更多