オブジェクト プロパティ アニメーターを使用すると、基本的には、「N」が変更するプロパティである X ミリ秒ごとに「setN()」メソッドを繰り返し呼び出す単なる数学関数になります。
アルファの場合に提供された例では、両方とも、invalidate()
アニメーション化しているビューを再描画するために を呼び出す必要があります。違いはsetAlpha()
、View
オブジェクトを呼び出すとき、それがあなたを呼び出すinvalidate()
ことです。ターゲット オブジェクトをPaint
、ドローアブルの描画に使用されるオブジェクトに設定する場合でも、新しいパラメータで再描画invalidate()
されるように を呼び出す必要があります。View
Paint
理想的には、アニメーション化するビューでのみ再描画が行われるように、ターゲットを可能な限り最高レベルの子に設定する必要があります。たとえば、ターゲットをルート ビューに設定すると、invalidate()
ViewGroup 全体のすべての子が呼び出さdraw()
れ、ViewGroup のすべての子が呼び出されます。最上位に設定するとImageView
、 のみImageView
が再描画されます。
ハードウェアを最大限に活用するには、レイヤー プロパティを使用する必要があります。最初に、アニメーション化する最上位の親ビューを決定する必要があります。のみをフェードしたい場合はDrawable
、Drawable
または を含むになりView
ます。すべてをフェードしたい場合は、ルート ビューになります。アニメートすることを決定したView
ものはすべて、一度に全体に適用されます。
setLayerType()
Animator を開始する直前に、親ビューで使用します。に設定しView#LAYER_TYPE_HARDWARE
ます。次に を設定し、アニメーターの完了時にAnimationListener
LayerType をView#LAYER_TYPE_SOFTWARE
またはにリセットします。View#LAYER_TYPE_NONE
myParentView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
myObjectAnimator.addListener(new ViewAnimator.AnimatorListener() {
public void onAnimationEnd(Animator animation) {
myParentView.setLayerType(View.LAYER_TYPE_NONE);
}
public void onAnimationRepeat(Animator animation) {
}
public void onAnimationStart(Animator animation) {
}
public void onAnimationCancel(Animator animation) {
myParentView.setLayerType(View.LAYER_TYPE_NONE, null);
}
}
myObjectAnimator.start();
この場合、プロパティmyParentView
を使用して変換すると、レイヤーとそのすべての子が 1 つの平面に配置されます。ハードウェアメモリに入れます。ビュー全体を一度に翻訳します。次に、完了したら、メモリから削除します。translateX
myParentView
myParentView
編集:
最後に、Alpha は CPU に大混乱をもたらします。ハーフ アルファの何かをビュー全体で翻訳すると、ビューを単純に翻訳する場合よりもレンダリングが難しくなります。控えめに使用してください。