5

ViewPropertyAnimator を使用するときに繰り返し回数/モードを指定する方法はありますか?

4

1 に答える 1

4

残念ながら、 にViewPropertyAnimatorは、実行するアニメーションの繰り返し回数を指定する方法がありません。startAnimation()ViewPropertyAnimator のメソッドの javadocs に記載されているとおり:

一連のプロパティの基になる Animator を開始します。単純に 0 から 1 まで実行する単一のアニメーターを使用し、その小数値を使用して各プロパティ値を適宜設定します。

残念ながら、それが使用する値アニメーターはプライベートであり、 のパブリック メソッドによって提供される以外の方法でその状態を操作する可能性はありません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 に答える