こんにちわ。昨年(23年末)に開発者登録し、アプリのリリースを始めたzm softです。開発者向けのアプリもリリースを予定していますので、よければご確認ください。
皆さんはアプリ内でアニメーション表示をつかっていますか?少しアニメーションがあるだけでアプリとして分かりやすくなったり見栄えが良くなったりしますよね?そこで、本日は、androidアプリでアニメーション表示をする話を書こうと思います。
LottieAnimation
私が使用しているのは、アニメーション表示ライブラリであるLottieAnimatiinです。比較的簡単に軽量のアニメーション表示ができるので利用しています。
どんなアニメーション表示ができるか/アニメーションの種類
まず、このライブラリでの良い点は、無料で利用できるアニメーションの豊富さです。例えば、以下のようなアニメーションがあります。
このようなアニメーションはLottieFilesの公式サイトで公開されています。有料のアニメーションも多数ありますが、無料に絞って検索をして出てくるものだけでも十分に利用ができます。基本的に私はアニメーションをイチから作るスキルもエネルギーもないため、なにか動きが欲しいときにはまずは、このサイトから使えるものがないかを考えます。例えば、以下のようなアニメーションを使うことで、初回表示時によくあるクリック箇所をユーザーに教えるといった表現ができます。私は実際にこの右側のアニメーションを利用して、ユーザーへの操作案内をするようにしました。
ポイントは手軽さ
実装においてもかなりシンプルに対応できます。例えば、決まったレイアウトにアニメーションを表示するだけであれば、以下のような形で定義するだけで動きます。ロジックの実装をしなくても動作するって良いですよね。
Lottieの簡単な実装方法
Lottieの実装は非常にシンプルです。特定のレイアウトにアニメーションを埋め込むだけで、追加のロジックなしで動作します。
実装例:
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_id"
app:lottie_rawRes="@raw/your_lottie_animation"/>
Lottieの基本的な使い方
Lottieの大まかな使い方は以下の通りです。
- ライブラリの組み込み(build.gradleの修正)
- アニメーションファイルの取得と配置
- レイアウトファイルの設定
- アニメーションのカスタマイズ
具体的な実装例とコード
以下に、Lottieを使用する際の具体的な実装例を提供します。これには、ライブラリの取り込み、アニメーションファイルの配置方法、レイアウトファイルの設定方法、さらにアニメーションのカスタマイズ方法が含まれます。
build.gradleへの記載/ライブラリの取り込み:
まずは、ライブラリ取り込んでlottieを使える状態にします。
特に組み合わせ等の問題がなければ、最新環境を利用してください。
dependencies {
implementation 'com.airbnb.android:lottie:3.4.0'
}
アニメーションファイルの配置:
LottieFilesの公式サイトから好きなアニメーションファイル(.json)をダウンロードし、アプリのres/rawフォルダに配置します。利用したいアニメーションを見つけて、ワークスペースに保存したうえでダウンロードボタンからダウンロードができます。ダウンロードは、無料ですがユーザー登録が必要になります。配置先は、rawフォルダです。フォルダがない場合には作成してください。また、ファイル名はandroidの命名規則に従う形で任意に変更してください。(規則に従わない場合は、以下のようにエラー表示されます。)
レイアウトファイルの設定:
XMLレイアウトにLottieAnimationViewを追加し、ダウンロードしたアニメーションファイルを参照できるようにします。
アニメーションのカスタマイズ:
必要に応じて、アニメーションの挙動をカスタマイズしてください。アニメーションの設定では、以下のようなことが行えます。
- ループ再生の有無
- ループ回数の指定
- 再生スピードの指定(逆再生を含む)
動的な処理を追加すれば、好きなタイミングで再生/停止をしたり、再生速度を変えたりもできます。
まずは、静的な指定の仕方についてです。それぞれ以下の指定によりアニメーション動作が変わります。
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_id"
android:scaleType="centerCrop"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_speed="0.15"
app:lottie_rawRes="@raw/your_lottie_animation"/>
この例では、your_lottie_animation.jsonのファイルを0.15倍の再生速度で自動再生 かつ 繰り返し再生しています。
次に動的な処理です。
lottieAnimationView.playAnimation()
上記処理で再生ができます。再生以外にも設定を変更して停止などスピードを変えたりもできます。以下のようにリスナーをセットし、再生の終了を検知して処理をすることもできます。
lottieAnimationView.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator) {
// アニメーション開始時の処理
}
override fun onAnimationEnd(animation: Animator) {
// アニメーション終了時の処理
}
override fun onAnimationCancel(animation: Animator) {
// アニメーションがキャンセルされた時の処理
}
override fun onAnimationRepeat(animation: Animator) {
// アニメーションがリピートされる時の処理
}
})
注意点とトラブルシューティング
Lottieは非常に便利ですが、いくつかの注意点があります。特に、オブジェクトの位置変更が期待通りに機能しないことがあるようです。また、アニメーション終了時の処理に関するスタックオーバーフローの問題や、onPause後の挙動についても説明します。
トラブルシューティングの例1:
私の実装の問題ですがアニメーション終了時の処理のハンドリングの仕方でスタックオーバーフローを引き起こしました。具体的には、アニメーションの最後までいったときに逆再生し、再生と逆再生を繰り返す用にした処理に問題がありました。再生の終了時に再生方向を変えてplayAnimation()をし直すようにしていたことで再起呼び出しとなり、再生の度にスタックが詰みあがり、アプリが落ちる現象が発生し、PlayStoreでのアップデートを拒絶されてしまいました。以下のようにメインスレッドへのポストとしキューへの積み直しをすることで問題を解決しました。
lottieAnimationView.addAnimatorListener(object : Animator.AnimatorListener {
override fun onAnimationStart(animation: Animator) {
// アニメーション開始時の処理
}
override fun onAnimationEnd(animation: Animator) {
// アニメーション終了時の処理
lottieAnimationView.speed = lottieAnimationView.speed*(-1) // 逆再生のためにスピードを逆にする
lottieAnimationView.post {
// 直接呼ぶと再起呼び出しでスタックオーバーフローするのでPOSTする
if(isAttachedToWindow) {
lottieAnimationView.playAnimation()
}
}
}
override fun onAnimationCancel(animation: Animator) {
// アニメーションがキャンセルされた時の処理
}
override fun onAnimationRepeat(animation: Animator) {
// アニメーションがリピートされる時の処理
}
})
トラブルシューティングの例2:
もう一つ気を付けなければならないのはonPause後の処理です。不要な動作をさせないため、バックグラウンドでのanimationを止めるべきでしょう。
override fun onResume(owner: LifecycleOwner) {
super.onResume(owner)
// アニメーションを開始
lottieAnimationView.playAnimation()
}
override fun onPause(owner: LifecycleOwner) {
lottieAnimationView.cancelAnimation()
super.onPause(owner)
}
しかし、アニメーションの終了時等に処理を行なっている場合には、これだけでは不十分でした。アニメーションの終了とほぼ同時にバックグラウンド回った際の挙動を意識する必要があります。裏でアニメーションをしないように再生を止めたとしても、タイミングによっては裏にまわった後にonAnimationEnd等が走ります。そのため、そのあたりのチェックをせず、UIを触っていたりするとExceptionやアプリが落ちる動作につながります。そこで前述のコードの以下の部分ように、親ビューがデタッチされていないかどうかをチェックし、再処理を行う必要がありました。
if(isAttachedToWindow) {
binding.lottieBackground.playAnimation()
}
まとめ
Lottieは、アプリのUIを向上させるための強力なツールです。無料で利用できるアニメーションが豊富で、実装もシンプルです。注意点を理解し、適切に対処することで、アプリ開発における大きなメリットを享受できます。多少の注意点はありますが全体的に非常に使いやすく、無料で使えるリソースも多いことから素晴らしいライブラリだと思います。アプリの見た目を良くするのに一役買ってくれるのは間違いないと思うので是非お試しください。
Your article helped me a lot, is there any more related content? Thanks!
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me?
Your article helped me a lot, is there any more related content? Thanks!
Thank you for your sharing. I am worried that I lack creative ideas. It is your article that makes me full of hope. Thank you. But, I have a question, can you help me? https://accounts.binance.com/pt-PT/register?ref=DB40ITMB
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
Hello there! Do you know if they make any plugins to assist with Search Engine Optimization? I’m trying to get my blog to rank
for some targeted keywords but I’m not seeing very good success.
If you know of any please share. Cheers! You can read similar article here: Eco blankets
Belief within the divine steerage that angel quantity 611 brings, and step into a future stuffed with harmony, abundance, and spiritual fulfillment.
sugar defender official website For
years, I have actually fought unpredictable blood glucose swings that left me feeling drained pipes and sluggish.
Yet considering that incorporating Sugar my power degrees are now stable and regular, and I no
longer strike a wall in the mid-days. I value that it’s a
gentle, natural technique that doesn’t included any type of unpleasant negative effects.
It’s really changed my every day life.
Thanks for sharing. I read many of your blog posts, cool, your blog is very good.
I’m excited to find this great site. I need to to thank you for your time for this fantastic read!! I definitely loved every part of it and i also have you bookmarked to look at new things on your web site.
Oh my goodness! Impressive article dude! Thanks, However I am encountering problems with your RSS. I don’t understand why I cannot join it. Is there anyone else getting similar RSS problems? Anybody who knows the answer can you kindly respond? Thanks!
Everything is very open with a really clear explanation of the issues. It was really informative. Your website is very helpful. Many thanks for sharing.
I really like it whenever people come together and share opinions. Great blog, stick with it!
After I originally commented I seem to have clicked on the -Notify me when new comments are added- checkbox and from now on each time a comment is added I get four emails with the same comment. There has to be a way you are able to remove me from that service? Many thanks.
Yes. I’ve been driving for years.
After looking into a handful of the blog posts on your blog, I really like your way of blogging. I book marked it to my bookmark site list and will be checking back in the near future. Please check out my web site as well and tell me what you think.
When he was named UPS Transportation Professor of the Non-public Sector in 1991, Dr.
Your point of view caught my eye and was very interesting. Thanks. I have a question for you.
She begins to fall for him when he begins making her really feel emotions she by no means knew she had and how he cares for her in his personal manner.
Remarks: After two attracts, Karpov scored another win by forcing his opponent into a position the place he couldn’t protect his pawns and at the identical time guard against mate.
And you may add to the momentous occasion with one of our picture cakes.
Town receives far more sunshine than different snowy cities, that are primarily within the north of the nation.
I used to be able to find good info from your blog articles.
Your article helped me a lot, is there any more related content? Thanks! https://www.binance.com/register?ref=P9L9FQKY
Greetings! Very useful advice within this post! It is the little changes which will make the biggest changes. Thanks for sharing!
A motivating discussion is definitely worth comment. There’s no doubt that that you should write more on this topic, it may not be a taboo matter but generally people don’t discuss such subjects. To the next! Many thanks.
You should be a part of a contest for one of the finest websites online. I will highly recommend this website!
This is basically a jukebox musical, with selections from The great American Songbook (“Bewitched, Bothered, and Bewildered”) and ‘60s worldwide pop (“To Love Someone,” originated by the Bee Gees and additional popularized by Janis Joplin) and more.
After looking at a handful of the blog articles on your web page, I really like your way of writing a blog. I bookmarked it to my bookmark site list and will be checking back soon. Please check out my website as well and let me know your opinion.
More track chart data could be found on the List of Okay-pop songs on the Billboard charts.
Lee married Alice Schafer on Jan 1, 1939 in Spokane and to this union were born two daughters, Mrs Roy ( Nancy ) Todd of Ventura, CA, and Mrs H E (Kay) McGuinness, Long Beach , CA .