[Jetpack Compose] Lottieアニメーションを再生する

実装

アニメーションのJSONファイルはres/raw内に入れておく。

Dependencyには以下を追加。

implementation("com.airbnb.android:lottie-compose:(最新Version)")

Sync完了したら以下のように実装

@Composable
private fun MyLottieView() {
    val composition by rememberLottieComposition(LottieCompositionSpec.RawRes(R.raw.<#ファイル名#>))

    Column(
        modifier = Modifier.fillMaxSize(),
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        LottieAnimation(
            composition = composition,
            iterations = LottieConstants.IterateForever,
            modifier = Modifier.fillMaxSize(0.5f)
        )
    }
}

// おまけ: LottieAnimationの全容
LottieAnimation(
    composition: LottieComposition?, // Lottieアニメーションのコンポジションデータ。JSONファイルから読み込まれる。
    modifier: Modifier = Modifier, 
    isPlaying: Boolean = true, // アニメーションが再生中かどうかを示す真偽値。
    restartOnPlay: Boolean = true, // `isPlaying`がtrueになったときにアニメーションを最初から再開するかどうか。
    clipSpec: LottieClipSpec? = null, // アニメーションの特定の部分を切り抜いて表示するための設定。
    speed: Float = 1f, // アニメーションの再生速度。1fが通常速度
    iterations: Int = 1, // アニメーションの繰り返し回数。LottieConstants.IterateForeverで無限ループ
    outlineMasksAndMattes: Boolean = false, // マスクとマットをアウトラインとして描画するかどうか。パフォーマンスに影響する可能性あり
    applyOpacityToLayers: Boolean = false, // レイヤーの不透明度を適用するかどうか。
    enableMergePaths: Boolean = false, // ベクターパスのマージを有効にするかどうか。複雑なアニメーションで必要になることがある
    renderMode: RenderMode = RenderMode.AUTOMATIC, // アニメーションのレンダリング方法。AUTOMATIC、SOFTWARE、HARDWARE。
    reverseOnRepeat: Boolean = false, // 繰り返し時にアニメーションを逆再生するかどうか。
    maintainOriginalImageBounds: Boolean = false, // 元の画像のバウンディングボックスを維持するかどうか。
    dynamicProperties: LottieDynamicProperties? = null, // アニメーションの特定の部分を動的に変更するためのプロパティ。色や形状などを変更。
    alignment: Alignment = Alignment.Center, 
    contentScale: ContentScale = ContentScale.Fit, // Composableのサイズに対するアニメーションのスケール方法。
    clipToCompositionBounds: Boolean = true, // アニメーションがコンポジションの境界線内でクリップされるかどうか。
    clipTextToBoundingBox: Boolean = false, // テキストレイヤーがそのバウンディングボックス内でクリップされるかどうか。
    fontMap: Map<String, Typeface>? = null, // アニメーションで使用されるフォントのマッピング。
    safeMode: Boolean = false, // 安全モードを有効にするかどうか。互換性の問題を防ぐのに役立つ
    asyncUpdates: AsyncUpdates = AsyncUpdates.AUTOMATIC // 非同期アップデートの処理方法。
)