【问题标题】:Object Animator Update Listener keep firing like a crazy [duplicate]对象动画师更新侦听器像疯了一样继续射击[重复]
【发布时间】:2016-08-30 04:41:18
【问题描述】:

美好的一天。Android 对象动画师一直在疯狂地射击,没有什么能阻止它!没有!请帮助我做错了什么?

    AnimatedColorSpan span = new AnimatedColorSpan(context);
    final SpannableString spannableString = new SpannableString(textToShow);
    this.spannableString = spannableString;
    String substring = textToShow.toLowerCase();
    int start = textToShow.toLowerCase().indexOf(substring);
    int end = start + substring.length();
    spannableString.setSpan(span, start, end, 0);

    objectAnimator = ObjectAnimator.ofFloat(
            span, ANIMATED_COLOR_SPAN_FLOAT_PROPERTY, 0, 100);
    objectAnimator.setEvaluator(new FloatEvaluator());
    objectAnimator.addUpdateListener(updateListener);
    objectAnimator.setInterpolator(new LinearInterpolator());
    objectAnimator.setDuration(DURATION);
    objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
    objectAnimator.start();

 private static final Property<AnimatedColorSpan, Float> ANIMATED_COLOR_SPAN_FLOAT_PROPERTY
        = new Property<AnimatedColorSpan, Float>(Float.class, "ANIMATED_COLOR_SPAN_FLOAT_PROPERTY") {
    @Override
    public void set(AnimatedColorSpan span, Float value) {
        span.setTranslateXPercentage(value);
    }

    @Override
    public Float get(AnimatedColorSpan span) {
        return span.getTranslateXPercentage();
    }
};

public static RainbowAnimation get() {
    return rainbowAnimation;
}

public void stopRainbowAnimation() {
    stopCalled = true;
    if (objectAnimator != null) {
        objectAnimator.removeUpdateListener(updateListener);
        objectAnimator.cancel();
        objectAnimator.removeAllListeners();
        objectAnimator.removeAllUpdateListeners();
        textViewToAttach.setText(textToShow);
    }
    System.gc();
}


private ValueAnimator.AnimatorUpdateListener updateListener = new ValueAnimator.AnimatorUpdateListener() {
    @Override
    public void onAnimationUpdate(ValueAnimator valueAnimator) {
        if (!stopCalled) {
            textViewToAttach.setText(spannableString);
        } else {
            if (objectAnimator != null) {
                objectAnimator.setDuration(10);
                objectAnimator.removeUpdateListener(this);
                objectAnimator = null;
            }
        }
    }
};

我已经在这里尝试了所有内容,您可以看到我正在删除所有可能删除的内容,但它只会记录日志,这让我发疯,因为堆会像地狱一样增长! 我的代码有什么问题我在这里做错了什么?

【问题讨论】:

    标签: android listener objectanimator


    【解决方案1】:

    如果你想停止动画师调用

    objectAnimator.end();
    

    如果您希望动画不重复,请在此行注释

    objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
    

    它不会再次重复动画。

    【讨论】:

    • 我看到问题是我希望动画重复,只要我手动禁用它就是这个想法,但同时我会尝试这段代码,看看发生了什么
    • 嗯是的仍然无法正常工作.....像疯了一样动画
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-13
    • 1970-01-01
    • 2012-06-12
    • 1970-01-01
    • 2012-11-29
    • 2011-08-17
    相关资源
    最近更新 更多