Android属性アニメーション---Property Animation(四)


ValueAnimatorでアニメーションを作る
ValueAnimatorクラスでは、アニメーション中のint、float、またはカラー値を設定することで、アニメーション再生中のアニメーション値の種類を指定します.ValueAnimatorクラスのファクトリメソッドを使用して、ofInt()、ofFloat()、ofObject()のValueAnimatorオブジェクトを取得します.例:
ValueAnimator animation = ValueAnimator.ofFloat(0f, 1f);
animation.setDuration(1000);
animation.start();
このコードでは、start()メソッドの実行が開始されると、ValueAnimatorオブジェクトは1000ミリ秒のアニメーション期間中に0~1の間でアニメーションの値の計算を開始します.
また、以下の方法でカスタムアニメーションの種類を指定することもできます.
ValueAnimator animation = ValueAnimator.ofObject(new MyTypeEvaluator(), startPropertyValue, endPropertyValue);
animation.setDuration(1000);
animation.start();
このコードでは、start()メソッドの実行が開始されると、ValueAnimatorオブジェクトは1000ミリ秒のアニメーション期間中にMyTypeEvealuatorオブジェクトから提供されるロジックを使用して、startPropertyValueとendPropertyValueの間でアニメーションの値の計算を開始します.
ただし、前のコードクリップでは、ValueAnimatorオブジェクトが直接オブジェクトまたはプロパティ上で動作しないため、オブジェクトに実際の影響はありません.このようにすると、これらの計算値を使用して、アニメーション効果を望むオブジェクトを修正することができます.ValueAnimatorクラスで応答するイベントリスナーを定義することで、フレーム更新などのアニメーション実行中の重要なイベントを処理します.Listenerが実行されると、getAnimateValue()メソッドを呼び出すことで、指定されたフレームのリフレッシュの計算値を得ることができる.Listenerの詳細については、アニメーションListenerを参照してください.
ObjectAnimatorでアニメーションを作る
ObjectAnimatorクラスはValueAnimatorクラスのサブクラスであり、タイミングエンジンとValueAnimatorオブジェクトの計算値を組み合わせて、ターゲットオブジェクトのネーミング属性にアニメーション能力を持たせる.これにより、ValueAnimatorを実現する必要がない場合、任意のオブジェクトにアニメーション効果を持たせることがより容易になる.アニメーションのプロパティが自動的に更新されるため、AnimatorUpdateListenerインタフェース.
ObjectAnimatorオブジェクトをインスタンス化するのは、ValueAnimatorオブジェクトをインスタンス化するのと似ていますが、アニメーション期間のパラメータとともに、アニメーションオブジェクトとオブジェクトのアニメーションアトリビュート(文字列で)の名前を指定する必要があります.
ObjectAnimator anim = ObjectAnimator.ofFloat(foo, "alpha", 0f, 1f);
anim.setDuration(1000);
anim.start();
ObjectAnimatorオブジェクトのプロパティを正しく更新するには、次のことをする必要があります.
1.アニメーション効果のアトリビュートには、set形式の設定方法が必要です.ObjectAnimatorオブジェクトは、アニメーション処理中に自動的に対応するアニメーションエフェクトアトリビュートを更新するため、このセットアップメソッドを使用して対応するアトリビュートにアクセスする必要があります.たとえば、プロパティ名がfooの場合、setFoo()メソッドが必要です.このセットアップメソッドが存在しない場合は、次の3つの選択肢があります.
A.権利があれば、このクラスにセットアップメソッドを追加します.
B.変更する権利のあるパッケージクラスを使用し、このパッケージは有効な設定方法でアニメーション値を受信し、この値を初期オブジェクトに転送することができます.
C.代わりにValueAnimatorクラスを使用する.
2.ObjectAnimatorクラスのファクトリメソッドでvalues...パラメータを指定した場合、この値はアニメーションの終了値として仮定されます.したがって、オブジェクトのアニメーションエフェクトアトリビュートには、アニメーションの開始値を取得する方法が必要です.この取得方法はget()形式を使用する必要があります.たとえば、属性がfooであれば、getFooメソッドが必要です.
3.アニメーション属性の取得(必要に応じて)と設定方法は、ObjectAnimatorオブジェクトに割り当てられた同じタイプの開始値と終了値を操作する必要があります.例えば、次のようなObjectAnimatorオブジェクトを構築する場合、targetObejctが必要となる.setPropName(float)とtargetObject.getPropName(float)メソッド:
ObjectAnimator.ofFloat(targetObject,"propName",1f)

4.プロパティまたはオブジェクト上のアニメーション効果に応じて、ビューオブジェクト上のinvalidate()メソッドを呼び出し、アニメーション効果を更新するときにスクリーンに自分の再描画を強制する必要がある場合があります.これをonAnimationUpdate()コールバックメソッドで行います.たとえば、図形描画オブジェクトの色プロパティのアニメーション効果は、チームが自分を再描画したときに変更結果が画面に更新されます.setAlpha()やsetTranslationX()などのViewオブジェクト上のすべてのプロパティの設定器は、Viewオブジェクトを正しく失効させるので、これらのメソッドを呼び出して新しい値を設定するときは、失効する必要はありません.Listenerの詳細については、アニメーションListenerを参照してください.