gpt4 book ai didi

android - 我可以重用 ValueAnimator 吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:44:10 26 4
gpt4 key购买 nike

我有以下代码(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 运行时触摸屏幕,它就会正确地开始向后工作(因为我已经交换了值)。但是,如果我在完成后触摸屏幕,那么什么也不会发生,它不会重新开始。

问题是我能否以某种方式重用此动画制作器并使其在停止后针对给定值再次工作?

最佳答案

您可以通过以下方式重用 animator:

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

您还可以使用 animator.cancel() 而不是 animator.end() 并将上一个动画的最后一个值作为起始 float 传递给新动画.例如,如果最后一个动画值是 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();
}

关于android - 我可以重用 ValueAnimator 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28387353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com