android初心者がLottieを使って簡単にアニメーションを追加できた話

## はじめに
この記事は[FUN part2 Advent Calendar 2019](https://adventar.org/calendars/4179)の22日目の記事です。
前日の記事は[SCPで始めるAllenNLP ～SCPオブジェクトクラス分類～](https://akashiakatsuki.github.io/2019/12/21/Advent2019/)でした！
また、同日に[Tomoka](https://adventar.org/users/26442)さんが記事をあげてくださっていると思うのでそちらも是非

####本題に入る前に
今回の記事は12月に開かれたハッカソンでLottieの存在を知った僕がLottieを知らない人向けにこんなライブラリがあったよといった紹介をする記事であり、詳細な使い方やAndroid studio以外での使い方などについては他のページをご参照ください。

##Lottieとは
>Easily add high-quality animation to any  native app.

>Lottie is an iOS, Android, and React Native >library that renders After Effects >animations in real time, allowing apps to >use animations as easily as they use static >images.
>出典:[Lottie - Airbnb Design](https://airbnb.design/lottie/)

つまるところどんなプラットフォームのアプリでも簡単に高品質なアニメーションが使えるよ〜っていうライブラリですね（意訳）

このライブラリはAfter Effectsで作成されたアニメーションをjsonファイルに変換することで手軽に自分のアプリにアニメーションを追加することができるという優れものです。
これを追加するだけでアプリの見栄えが一気に良くなり、完成度が上がった感じがするからすごい。感動。頭が上がらない。

ちなみに、Lottieの詳細な概念などを理解するのにはこちらのスライド、動画がわかりやすいと思いますのでこちらも是非！
https://droidkaigi.jp/2019/timetable/70876/

<blockquote class="twitter-tweet"><p lang="en" dir="ltr">Christmas is still loading...⛄️<br><br>This snowman is the perfect loader for this time of year. Lottie animation by Ucilucil 👉<a href="https://t.co/wbTbLwjwUw">https://t.co/wbTbLwjwUw</a><a href="https://twitter.com/hashtag/lottiefiles?src=hash&amp;ref_src=twsrc%5Etfw">#lottiefiles</a> <a href="https://twitter.com/hashtag/lottieanimation?src=hash&amp;ref_src=twsrc%5Etfw">#lottieanimation</a> <a href="https://twitter.com/hashtag/buildwithlottie?src=hash&amp;ref_src=twsrc%5Etfw">#buildwithlottie</a> <a href="https://twitter.com/hashtag/aftereffects?src=hash&amp;ref_src=twsrc%5Etfw">#aftereffects</a> <a href="https://twitter.com/hashtag/animation?src=hash&amp;ref_src=twsrc%5Etfw">#animation</a> <a href="https://twitter.com/hashtag/animations?src=hash&amp;ref_src=twsrc%5Etfw">#animations</a> <a href="https://twitter.com/hashtag/motiondesign?src=hash&amp;ref_src=twsrc%5Etfw">#motiondesign</a> <a href="https://t.co/Gid81Z2uYy">pic.twitter.com/Gid81Z2uYy</a></p>&mdash; LottieFiles (@LottieFiles) <a href="https://twitter.com/LottieFiles/status/1205866015382392832?ref_src=twsrc%5Etfw">December 14, 2019</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>

##使い方

###手順1
まずは[LottieFiles](https://lottiefiles.com/)やLottieプロジェクトの[サンプル](https://github.com/airbnb/lottie-android/tree/master/LottieSample/src/main/kotlin/com/airbnb/lottie/samples)などから自分の意図に沿ったアニメーションを探してきてjsonファイルでダウンロードします。
ちなみに、この時落としてきたファイル名にハイフンや数字が入っているとAndroid studioのビルドが通らない恐れがあるのでいい感じに変更してください

###手順2
次にAndroid studioにLottieライブラリをインポートする、もしくは下記コードをbuild.gradleのdependencies内に記述します。
 
```kotlin:build.gradle
implementation 'com.airbnb.android:lottie:$lottieVersion'　
```
また、手順1でダウンロードしたjsonファイルをres下にrawディレクトリを作るなどして配置します

<img width="295" alt="スクリーンショット 2019-12-21 23.04.24.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391674/7e030e4d-c17d-635f-75da-e9017f1f4ac0.png">

###手順3
最後に追加したい画面のレイアウトxmlに

```sample.xml
<com.airbnb.lottie.LottieAnimationView
        android:layout_width="100dp"
        android:layout_height="100dp"
        app:lottie_autoPlay="true"
        app:lottie_loop="true"
        app:lottie_rawRes="@raw/snowing"
        />
```
のような記述を行うだけでアニメーションを再生させることができます
![lottie_gif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/391674/621a964a-8a68-358e-d8f1-0d21a403d2e5.gif)
きっとかんたんですね！！！

##最後に
lottie_loopをfalseにすると一度だけのアニメーション表示になったり、.kt内にコードを記述してアニメーションを表示させるといった方法や、ボタンが押された時にアニメーションが表示されるようにするなどと色々と設定することができるのでandroidエキスパートの方が使うとさらに凝ったものにできる非常に便利なライブラリだと思います！
当初Lottieという存在を知ってから理解するのに1時間以上かけていたため、簡単に使えるとか言っている記事を見てはよくわからない顔をしていたのですが理解してみればたしかに簡単でした。
明日は[chikuwa_IT](https://adventar.org/users/10764)さんと[穂乃夏](https://adventar.org/users/26454)さんです。明日も楽しみにしていたいと思います。
##参考

公式HP
https://airbnb.design/lottie/
https://lottiefiles.com/
Lottieを理解するのにありがたいスライド、動画
https://droidkaigi.jp/2019/timetable/70876/
使いこなそうとにらめっこした記事
https://qiita.com/ikemura23/items/8c5f87f98cb7fc3ceb27
https://qiita.com/wiroha/items/bc361218629ca03fbd19
https://dev.classmethod.jp/smartphone/android/lottie-getting-started/
https://motida-japan.hatenablog.com/entry/2017/02/19/145537
https://droidkaigi.jp/2019/timetable/69036/