0
2

More than 3 years have passed since last update.

AnimatorとAnimation

Last updated at Posted at 2020-08-21

基本的に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が見えないです。

0
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
2