使用ViewPropertyAnimator时是否可以指定重复计数/模式?

最佳答案

不幸的是,ViewPropertyAnimator没有任何方法来指定其执行的动画的重复计数。如ViewPropertyAnimator中startAnimation()方法的javadocs中所述:



不幸的是,它使用的值动画器是私有(private)的,除了ViewPropertyAnimator的公共(public)方法提供的方法外,我们无法以其他任何方式来操纵它的状态。

重复动画

为您的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实例中,因此在每次动画后都不会刷新。因此,如果您希望在每次迭代后为 View 的某些属性递增动画,请确保在每次启动之前创建一个动画师的新实例。像这样:
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();
    }

10-08 06:37