如何停止安卓中的ObjectAnimator?

3

我正在使用对象动画器为我的按钮创建闪烁效果。一切都正常,除了我无法停止动画。这是一个bug还是我漏掉了什么?我有以下方法。

   public void manageBlinkEffect(View view){
    objectAnimator = ObjectAnimator.ofInt(view, "backgroundColor", Color.GRAY, Color.YELLOW);
    objectAnimator.setDuration(1000);
    objectAnimator.setEvaluator(new ArgbEvaluator());
    objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
    objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
    objectAnimator.start();
}

public void stopBlinkEffect(View view){
    objectAnimator = ObjectAnimator.ofInt(view, "backgroundColor", Color.GRAY, Color.YELLOW);
    objectAnimator.cancel();
}
2个回答

4
你正在创建一个新的ObjectAnimator对象,以停止由不同的ObjectAnimator启动的动画。应该像这样:
    ObjectAnimator objectAnimator;

    public void manageBlinkEffect(View view){
        objectAnimator = ObjectAnimator.ofInt(view, "backgroundColor", Color.GRAY, Color.YELLOW)
        objectAnimator.setDuration(1000);
        objectAnimator.setEvaluator(new ArgbEvaluator());
        objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
        objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
        objectAnimator.start();
    }

    public void stopBlinkEffect(View view){
        objectAnimator.cancel();
    }

但是如果我这样做,我会遇到“NullPointerExceptionError”。 - cantona_7
@cantona_7 请确保在取消动画之前首先实例化objectAnimator。基本上,您需要先调用manageBlinkEffect方法来实例化objectAnimator,然后再调用stopBlinkEffect方法。 - Prithvi Bhola
这对我帮助很大。谢谢!另外,我错过了两个要点:在对象上创建动画并不意味着目标对象以任何方式注册动画。因此,我必须确保我创建的ObjectAnimator以某种方式被“记住”,以便稍后可以停止它。 - ltuska

1
请查看源代码ObjectAnimator.ofInt(view, "backgroundColor", Color.GRAY, Color.YELLOW)每次返回一个新的对象。
你应该:
    public void manageBlinkEffect(View view){
    objectAnimator = ObjectAnimator.ofInt(view, "backgroundColor", 
    Color.GRAY, Color.YELLOW);
    objectAnimator.setDuration(1000);
    objectAnimator.setEvaluator(new ArgbEvaluator());
    objectAnimator.setRepeatMode(ValueAnimator.REVERSE);
    objectAnimator.setRepeatCount(ValueAnimator.INFINITE);
    objectAnimator.start();
}

public void stopBlinkEffect(View view){
    objectAnimator.cancel();
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接