先日、もりもりアニメーションを動かしてくれるライブラリLottieを組み込んでみてそこそこ触ってみたんだけど、地味なバグ?に引っかかって時間を取られた話。
現象
タイトル通りなんだけど、アニメーションをキャンセルしているのにも関わらずアニメーションが止まってくれないっていう現象にぶち当たった。
その時書いてたコードがこちら。
loadingView.visibility = View.INVISIBLE
loadingView.cancelAnimation()
単純にViewを非表示にしてアニメーションをキャンセルしている。
この状態でView.VISIBLEに戻すとアニメーションがもりもり動いている。動いている、、、。
cancelAnimation()をしているのにも関わらず動いている、、、。
ちなみに自分が予期しないタイミングでplayAnimation()をしちゃってるのかな?って疑って実装見直してみてもplayAnimation() は行っていない。
超謎だった。
対応
すごい単純な対応で現象が改修されたんだけど、個人的には腑に落ちていない・・・。
直したコードがこちら。
loadingView.cancelAnimation()
loadingView.visibility = View.INVISIBLE
単純にキャンセルと非表示の順序を変えただけ。
何故かこれだけで直った。
Lottieのコード少し見てみたんだけど、Viewの表示状態なんて見てなさそうな雰囲気がしたからとっても謎。
Lottieのドキュメントとかに書いてあるのかな?探してないけど。
個人的にはLottieのバグなんじゃないの?って疑っている。
まぁ、こんな単純な修正で直ったから良しとしよう。
キャンセルと非表示の順番は気をつけましょうねってことですね。