基本的にAnimationの全ての機能はAnimatorが全部実現できます。
AnimatorとAnimationの違いが何点がありますが、
一番重要な違いは以下の2点があります。
①対象ViewはBackgroundの状態になると、
Animationの場合、アニメーションを動かないです。
(もっと詳しい言うと、アニメーションが動きますが、開始と終了のイベントが来ないです。
つまり、アニメーション開始と終了後の処理が実行されない。)
Animatorの場合、対象ViewをBackgroundに移動しても、アニメーション開始と終了のイベントが来られます。
②Animationを実行中、見た目たけを更新されました。対象の本番の状態が更新されないです。
Animatorの場合、アニメーション更新中、対象の状態をアニメーションと一緒に更新されます。
例えば、ViewはAからBに移動、BからCに移動するっというアニメーションが実行しています。
・Animationの場合
アニメーションが終わる後、ViewはまたAの地点に戻る。
アニメーション実行中Viewの本番の地点はずっとAです。見た目はちがいますけれど、
・Animatorの場合
アニメーションがB地点に移動する時、Viewの本番地点はBの所です。
アニメーションが終わる後、Viewの地点はCになります。
アニメーション中、Viewの地点は随時更新中です。
つまり、Animationの場合、対象Viewの状態を保持しません、
Animatorの場合、対象Viewの状態をずっと自動的に保持されます。
もちろん、Animation使用の場合、アニメーションが終わる後、状態保持のAPIがありますが、
ただ、アニメーション中は状態保持ができない。
具体のプロジェクトでの運用
①Dialogの表示と消去でアニメーションを行います。
消去の仕様はアニメーション(例えば、透明になるアニメーション)が終わる後、Dialogのdismissを実行します。
Animation使用場合、Dialogがどんどん透明になります。完全の透明になる後、一瞬間にDialogが見えます。
Animator使用すれば、この問題がないです。
②同じ透明のアニメーション使用する場合、
Dialog消去後、同じインスタンスのDialog再表示します。(newしないで、直接にshowを呼ぶ)
Animatorの場合、Dialogが見えないです。(実はDialogはもう表示している)
この現象の原因は前回の消去アニメーションでDialogは透明になりました。
次回表示するとき、Dialogはまだ透明の状態です。
Dialogは明確に非透明の状態に設定しないとDialogが見えないです。