You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Glance Widget中使用raw目录的Lottie JSON文件实现动画?

在Glance Widget中集成raw目录的Lottie动画

核心前提

Glance Widget基于RemoteViews机制,普通Activity里直接用LottieAnimationView的实现逻辑不适用,必须使用Lottie专门为RemoteViews提供的适配方案。

实现步骤

1. 依赖配置

确保项目中引入对应依赖:

dependencies {
    // Glance Widget核心依赖
    implementation "androidx.glance:glance-appwidget:1.0.0"
    // Lottie核心及RemoteViews适配依赖
    implementation "com.airbnb.android:lottie:6.0.0"
}

2. 创建Lottie专属RemoteViews布局

在res/layout下新建widget_lottie_layout.xml,指定raw目录的Lottie JSON文件:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.airbnb.lottie.LottieAnimationView
        android:id="@+id/lottie_view"
        android:layout_width="120dp"
        android:layout_height="120dp"
        android:layout_gravity="center"
        app:lottie_rawRes="@raw/your_lottie_json_file"
        app:lottie_loop="true"
        app:lottie_autoPlay="true" />
</FrameLayout>

3. 在Glance Widget中嵌入布局

在你的Glance AppWidget类的内容提供方法里,通过remoteViews加载上述布局:

class MyGlanceWidget : GlanceAppWidget() {
    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent {
            Column(
                modifier = GlanceModifier.fillMaxSize(),
                horizontalAlignment = Alignment.CenterHorizontally,
                verticalAlignment = Alignment.CenterVertically
            ) {
                // 嵌入Lottie动画布局
                remoteViews(R.layout.widget_lottie_layout)
                // 可添加其他Widget内容
                Text(text = "Glance + Lottie Demo")
            }
        }
    }
}

4. 可选:动态控制动画状态

如果需要远程控制动画播放/暂停,可通过RemoteViews操作:

fun updateLottiePlayState(context: Context, glanceId: GlanceId, isPlaying: Boolean) {
    val remoteViews = RemoteViews(context.packageName, R.layout.widget_lottie_layout)
    if (isPlaying) {
        remoteViews.setInt(R.id.lottie_view, "playAnimation", 0)
    } else {
        remoteViews.setInt(R.id.lottie_view, "pauseAnimation", 0)
    }
    // 更新Widget
    MyGlanceWidget().update(context, glanceId, remoteViews)
}

常见问题排查

  • 确认raw目录下的Lottie JSON文件命名符合Android资源规范(小写字母、下划线,无特殊字符)
  • 检查Lottie与Glance的依赖版本是否兼容,避免版本冲突
  • 若动画未自动播放,确认布局中app:lottie_autoPlay="true"已设置,或通过代码触发播放

内容的提问来源于stack exchange,提问作者Mateusz Augustyniak

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.26 18:42:53