4

ObjectAnimator API(android.animation.ObjectAnimator)を使用して、ボタンがクリックされたらアニメーション化します(vはボタンです)。

ObjectAnimator animator = ObjectAnimator.ofFloat(v, "rotationY", 360f);
animator.setDuration(5000);
animator.start();

エミュレータでこれをテストすると、最初のクリックで機能します(ボタンが回転します)。しかし、ボタンをもう一度クリックすると(最初のクリック後にフラグメントが破棄されないなど)、エミュレーターにアニメーションが表示されません(エミュレーターは最速ではありませんが、5秒で何かが表示されるはずです)。

最初のアニメーションの後で何かを破棄/閉じる必要がありますか、それとも何が欠けていますか?誰かがヒントを持っているか、これを再現できますか?

よろしくお願いします、マーティン

4

2 に答える 2

12

2回目は、360.0fから360.0fまでのアニメーションを試みます。ofFloat()の呼び出しを次のように変更します。

ObjectAnimator.ofFloat(v, "rotationY", 0.0f, 360.0f)
于 2011-03-15T20:14:00.670 に答える
9

Romainの答えを詳しく説明すると、単一値のファクトリコンストラクターの結果は、現在の値が何であれ、パラメーターで指定された値まで実行されるアニメーションになります。あなたの場合、オブジェクトの値は0で、最初はアニメーション化されて(初回)、値は360になります。2回目に実行されると、オブジェクトは現在の値(360)から指定された値(360)にアニメーション化されます。アニメーションはあまりありません。

修正は上記のとおりです。アニメーターの開始値と終了値の両方をハードコーディングします。または、AnimatorListener.onAnimationEndメソッドを実装し、アニメーションの終了時に値をリセットすることで、アニメーションの終了時に値を0にリセットすることもできます。

    animator.addListener(new AnimatorListenerAdapter() {
        @Override
        public void onAnimationEnd(Animator animation) {
            v.setRotationY(0);
        }
    });
于 2011-04-04T20:45:41.817 に答える