【问题标题】:Can I reuse ValueAnimator?我可以重复使用 ValueAnimator 吗?
【发布时间】:2015-04-07 20:51:48
【问题描述】:

我有以下代码(Scala 中的 Android 项目):

val animator = new ValueAnimator
animator.setFloatValues(0f, 100f)
animator.setDuration(20000L)
animator.addUpdateListener(this) // prints current value to console
animator.start

override def onTouch(v: View, event: MotionEvent) = {
  animator.setFloatValues(100f, 0f)
  animator.setCurrentPlayTime(0)

  if (!animator.isRunning) animator.start
  true
}

如果我在animator 运行时触摸屏幕,那么它会正确开始向后工作(因为我已经交换了值)。但是,如果我在完成后触摸屏幕,则什么也不会发生,它不会重新开始。

问题是我可以以某种方式重用这个动画制作器,并在它停止后让它再次为给定的值工作吗?

【问题讨论】:

  • 不,你不能。我刚刚检查过了。我也想在我的应用程序中重用它。所以使用克隆来获取一个新实例,然后为每个实例设置目标视图。

标签: android animation reusability


【解决方案1】:

您可以通过以下方式重用动画师:

...
animator.end();
animator.setFloatValues(...);
animator.start();
...

您也可以使用animator.cancel() 代替animator.end() 并将最后一个动画的最后一个值作为起始浮点数传递给新动画。例如,如果最后一个动画值是 50,您可以调用 animator.setFloatValues(50, 0f),这样您的动画就会看起来相互关联。

考虑到接受的答案表明这是不可能的,我想提一下,当用户用两根手指点击时,Touch Circle 应用程序中使用了所描述的方法。顺便说一句,当物体有点颤抖时,这是一个非常好的效果 - 随意使用它,代码摘录如下:

void shapeTremble(long delay) {
    if (null == animatorTremble) {
        ValueAnimator animator = new ValueAnimator();
        animator.setDuration(850).setInterpolator(new AccelerateDecelerateInterpolator());
        animator.addUpdateListener(new AnimatorUpdateListener() {
            @Override
            public void onAnimationUpdate(ValueAnimator valueAnimator) {
                setCircleScale((Float) valueAnimator.getAnimatedValue(), true);
            }
        });
        animatorTremble = animator;
    } else {
        animatorTremble.cancel();
    }
    animatorTremble.setFloatValues(circleScale, 0.85f, 1.05f, 0.95f, 1.025f, 1.0f);
    animatorTremble.setStartDelay(delay);
    animatorTremble.start();
}

【讨论】:

    【解决方案2】:

    您不能重复使用动画。

    您需要reset() 并通过调用initialize() 方法重新初始化动画对象,然后才能再次使用相同的对象。这类似于实例化一个新的动画对象。

    【讨论】:

    • ValueAnimator 是 Animator,不是 Animation。
    猜你喜欢
    • 1970-01-01
    • 2023-03-16
    • 2011-11-28
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多