5

使用 ViewPropertyAnimator 时有没有办法指定重复计数/模式?

4

1 回答 1

4

不幸的是,ViewPropertyAnimator没有任何方法可以指定它执行的动画的重复次数。正如startAnimation()ViewPropertyAnimator 中方法的 javadocs 中所述:

为一组属性启动底层 Animator。我们使用一个简单地从 0 运行到 1 的动画器,然后使用该小数值来相应地设置每个属性值。

不幸的是,它使用的 value animator 是私有的,除了ViewPropertyAnimator.

重复动画

AnimatorListener为您指定一个ViewPropertyAnimator,它将在每次迭代后重新启动动画:

viewPropertyAnimator.setListener(new Animator.AnimatorListener() {

    ...

    @Override
    public void onAnimationEnd(Animator animation) {
        viewPropertyAnimator.start();
    }

    ...

});
viewPropertyAnimator.start();

如果要指定确切的执行次数,请以这种方式引入变量:

int[] repeatCount = {8}; //your repeat count goes here

viewPropertyAnimator.setListener(new Animator.AnimatorListener() {

    ...

    @Override
    public void onAnimationEnd(Animator animation) {
        if(repeatCount-- > 0)
            viewPropertyAnimator.start();
    }

    ...

});
viewPropertyAnimator.start();

编辑

但是,您应该注意,由ViewPropertyAnimator(开始值和结束值)设置动画的值存储在 的实例中ViewPropertyAnimator,因此不会在每次动画后刷新。因此,如果您想在每次迭代后以增量方式对视图的某些属性进行动画处理,请确保在每次开始之前创建动画器的新实例。像这样:

public void animateEndlessly(final View v) {
        ViewPropertyAnimator viewPropertyAnimator = v.animate().scaleX(1.5f).scaleY(1.5f).setDuration(300);
        viewPropertyAnimator.setListener(new Animator.AnimatorListener() {

            ...

            @Override
            public void onAnimationEnd(Animator animation) {
                animateEndlessly(v);
            }

            ...

        });
        viewPropertyAnimator.start();
    }
于 2015-07-24T07:55:42.360 回答