AndroidのValueAnimator
でワンショットのアニメーションを実装していたところ、動いている最中に止めたくなった時に
- 最初の状態に戻したい
- 最後の状態まですっ飛ばしたい
ということがあって少し考えた。
androidのanimation、cancel呼んだら最初の状態に戻ってほしいしend呼んだら途中をすっ飛ばして最後の状態になってほしいんだけど何かそういう感じの便利なやつありませんか
— ありがとう日清カレーメシ (@akihito104) July 11, 2019
AndroidのAnimator
クラスにはcancel()
とend()
というメソッドがあってどちらもアニメーションが止まるのだが、
cancel()
は呼ばれた時の状態で止まるend()
は最後の状態になる
という感じになっていた*1ので、cancel()
のほうの挙動を変えるためにAnimatorListener
をラップしてAnimatorListener.onAnimationCancel()
の中で最初の状態に戻すようなクラスを作った。
ワンショットのアニメーションなので、アニメーションが止まった時にリスナをremoveする処理もついでに入れた。最初コードを読んでいるとcancel()
を呼んだ時にもAnimatorListener.onAnimationEnd()
が呼ばれそうに見えたのでonAnimationCancel()
が呼ばれたときにフラグを立ててonAnimationEnd()
の中身が実行されないようにしていたんだけど、実際にはonAnimationEnd()
は呼ばれなかったので最終的にフラグは使わないことになった。今後いろんなケースに対応していくなかでキャンセルフラグを復活させることがあるかもしれない。