×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
Shibuya.apk #51 2025.01.31 Tiphaine Lottie アニメーションを カスタマイズしてみた
Slide 2
Slide 2 text
◆ Androidエンジニア @ DeNA (Pococha) ◆ DroidKaigiスタッフ ◆ Mobile Dev Japan運営 2 (ティフェン) Tiphaine
Slide 3
Slide 3 text
Lottie とは? 1
Slide 4
Slide 4 text
Lottie 4 Android, iOS, React Native, Web, Windowsで アニメーションをレンダリングするための オープンソースライブラリー airbnb.io/lottie
Slide 5
Slide 5 text
LottieFiles 5 lottiefiles.com 関連リソースが見つけられるサイト: インテグレーションツールやプラグイン、その他の Lottie製品、アセット、チュートリアルなど
Slide 6
Slide 6 text
Lottie を使うメリット 6 ◆ 軽量、大画面でもスケーラブル ◆ 各プラットフォームで同じファイルが使える ◆ カスタマイズ性と実装の容易さのバランスが良い
Slide 7
Slide 7 text
7 @Composable fun MyAnimation() { val composition by rememberLottieComposition( LottieCompositionSpec.RawRes(R.raw.thanks) ) LottieAnimation(composition = composition) } 使用例
Slide 8
Slide 8 text
2 どうカスタマイズ できる?
Slide 9
Slide 9 text
何をカスタマイズできる? 9 ◆ 基本:ループ回数、速度、進行 ◆ 動的:色、strokeの幅、不透明度、フォント、 テキストサイズ、画像など
Slide 10
Slide 10 text
Dynamic Properties 10 以下を使って実行時にアニメーションを更新する ◆ LottieProperty ◆ KeyPath 参考:Dynamic Properties
Slide 11
Slide 11 text
LottieProperty 11 ◆ 変更したいアニメーションのプロパティ ◆ 定数リストから選べる 参考:Animatable Properties list, LottieProperty.java
Slide 12
Slide 12 text
KeyPath 12 ◆ 変更したいアニメーションの部分 ◆ JSONファイルの中にその部分の情報を 持っているノードへのpath(文字列のリスト)
Slide 13
Slide 13 text
13 Free Thanks Button Animation - Shoval Ozeri (今日のアニメーション例)
Slide 14
Slide 14 text
14
Slide 15
Slide 15 text
15 “ks”の中身はこの要素が 「どう動くか」 「どう表示されるか」 を表すノード
Slide 16
Slide 16 text
16 KeyPath: 一番上のノードから、 対象のノードまでの 全てのノードの名前 (各ノードのnmの値)
Slide 17
Slide 17 text
17 JSONキーについて詳しく知りたい場合: Lottie系列二:高级属性 *中国語で申し訳ない 😇 (Google翻訳でなんとか...w)
Slide 18
Slide 18 text
3 試してみよう!
Slide 19
Slide 19 text
例:色を変更する 19 Fillされた時のハートを緑色にしよう ✊
Slide 20
Slide 20 text
20 参考:Animatable Properties list, LottieProperty.java Step 1: 適切なLottieProperty を選ぶ LottieProperty.COLOR
Slide 21
Slide 21 text
21 // 全てのノードと各ノードのKeyPathをリストとして返す LottieAnimationView.resolveKeyPath(KeyPath("**")) Step 2: 対象ノードのKeyPath を取得する このヘルパーメソッドを使って、 JSONファイルの構造を調べる、
Slide 22
Slide 22 text
22 ◆ Composeから呼べない 🥲 ◆ 結果をprintするために、アニメーションを AndroidViewに一次的にwrapする必要がある 参考:lottie-android issue #2080 しかし...
Slide 23
Slide 23 text
23 val context = LocalContext.current val customView = remember { LottieAnimationView(context) } AndroidView({ customView }) { view -> with(view) { setAnimation(R.raw.thanks) // これの結果をprintしたい view.resolveKeyPath(KeyPath("**")) } }
Slide 24
Slide 24 text
24 🤯
Slide 25
Slide 25 text
25
Slide 26
Slide 26 text
26
Slide 27
Slide 27 text
27
Slide 28
Slide 28 text
28 // “Heart Filled Outlines”の下にある全てのノード KeyPath("Love icon", "Heart Filled Outlines", "**") 参考:KeyPath (doc), Dynamic Lottie Animations on Android
Slide 29
Slide 29 text
29 Step 3: LottiePropertyとKeyPathを使って、 rememberLottieDynamicProperty を作成する
Slide 30
Slide 30 text
30 rememberLottieDynamicProperty( property = LottieProperty.COLOR, value = Color(0xFF00857a).toArgb(), keyPath = arrayOf( "Love icon", "Heart Filled Outlines", "**", ) )
Slide 31
Slide 31 text
31 val dynamicProperties = rememberLottieDynamicProperties( rememberLottieDynamicProperty(...), ... ) Step 4: rememberLottieDynamicPropert ies の中に DynamicPropertyをwrapする
Slide 32
Slide 32 text
32 LottieAnimation( composition = composition, iterations = LottieConstants.IterateForever, dynamicProperties = dynamicProperties, ) Step 5: LottieAnimation 引数として DynamicPropertiesを渡す
Slide 33
Slide 33 text
33 🎉 ✅ Fillされたハートの色が緑になった ✅ それ以外の色は変更無し
Slide 34
Slide 34 text
34 Thanks! tahia910 テーマ: SlidesCarnival Special Thanks: @MeilCli @shirataki