一、使用流程
| 方法调用 | 返回值 |
| LottieCompositionSpec.xxx() 解析文件 | LottieCompositionSpec 动画规格 |
| rememberLottieComposition(动画规格) 数据持久化 | LottieCompositionResult 加载结果 |
| animateLottieCompositionAsState(加载结果) 播放设置 | LottieAnimationState 动画状态 |
| LottieAnimation(动画规格, 加载结果) 显示控件 | - |
@Composable
fun Demo() {
//解析文件
val spec = LottieCompositionSpec.RawRes(R.raw.weather_rain)
//数据持久化
val composition by rememberLottieComposition(spec)
//播放设置
val progress by animateLottieCompositionAsState(composition)
//显示控件
LottieAnimation(composition = composition, progress = { progress } )
}
二、步骤详解
2.1 添加依赖
implementation("com.airbnb.android:lottie-compose:6.1.0")
maven( "https://oss.sonatype.org/content/repositories/snapshots/")
2.2 数据持久化(加载结果)
| @Composable fun rememberLottieComposition( spec: LottieCompositionSpec, //解析后的文件 imageAssetsFolder: String? = null, fontAssetsFolder: String = "fonts/", fontFileExtension: String = ".ttf", cacheKey: String? = DefaultCacheKey, onRetry: suspend (failCount: Int, previousException: Throwable) -> Boolean = { _, _ -> false }, ): LottieCompositionResult | |
| 参数 imageAssetsFolder | src/main/assets 中的子文件夹,包含此合成使用的导出图像 |
| 参数 fontAssetsFolder | 将在默认文件夹中查找字体文件。字体将根据 Lottie json 文件中指定的系列名称进行匹配,默认值为“fonts”。 |
| 参数 fontFileExtension | 在 fontAssetsFolder 或 fontRemapping 中指定的字体文件的默认文件扩展名,默认为 ttf。 |
| 参数 cacheKey | 设置缓存键,设置后的后续调用将直接从缓存返回,而不必重新加载和解析动画,如果将此设置为 null 以跳过缓存。默认情况下,将从 LottieCompositionSpec 自动生成派生的缓存密钥。 |
| 参数 onRetry | 这是一个挂起函数,如果加载动画失败将调用的可选回调,函数的两个参数分别为传递失败的计数和上一次加载组合的尝试的异常。 |
| 返回值 LottieCompositionResult | 可以通过它的属性 error、isLoading、isComplete、isFailure、 isSuccess 获取加载结果,调用 await() 等待从一个 coroutine 中解析出的组件、调用 .value 获取解析后的对象 LottieComposition。 |
2.1.1 从哪解析动画文件 spac
LottieCompositionSpec是一个密封接口,可以选择动画文件的来源(RawRws、Url、File、Assets、JsonString、ContentProvider)。
LottieCompositionSpec.RawRes(R.raw.animation)
LottieCompositionSpec.Url("https://...")
LottieCompositionSpec.Asset("animations/animation.json")
2.2.2 网络加载失败的处理 onRetry()
val retrySignal = rememberLottieRetrySignal()
val composition by rememberLottieComposition(
LottieCompositionSpec.Url("not a url"),
onRetry = { failCount, exception ->
retrySignal.awaitRetry()
// Continue retrying. Return false to stop trying.
true
}
)
//然后从点击监听的地方调用 retySignal.retry() 来重新加载
2.3 播放设置(动画状态)
| @Composable fun animateLottieCompositionAsState( composition: LottieComposition?, //加载结果 isPlaying: Boolean = true, restartOnPlay: Boolean = true, reverseOnRepeat: Boolean = false, clipSpec: LottieClipSpec? = null, speed: Float = 1f, iterations: Int = 1, cancellationBehavior: LottieCancellationBehavior = LottieCancellationBehavior.Immediately, ignoreSystemAnimatorScale: Boolean = false, useCompositionFrameRate: Boolean = false, ): LottieAnimationState | |
| 参数 isPlaying | 表示动画当前是否正在播放。需要注意的是,动画可能会因为达到目标迭代次数而结束,如果发生这种情况,就算将此参数设置为 true 动画也可能会停止。 |
| 参数 restartOnPlay | 暂停后重新播放是否从头开始。(如果 isPlaying 从 false 切换到 true,restartOnPlay 用来确定是否重置进度和迭代) |
| 参数 clipSpec | 用于指定动画播放应该被剪辑到的边界。 |
| 参数 speed | 动画应该播放的速度,大于 1 的话会加快速度, 0 到 1 之间的话会减慢它的速度,小于 0 的话将向后播放。 |
| 参数 iterations | 动画在停止前应重复的次数(正整数),如果想要永远重复可以设置为 LottieConstants.IterateForever,其实就是 Integer.MAX_VALUE。 |
| 参数 cancellationBehavior | 动画在取消时的行为,如果有一个基于状态的转换,并希望在继续播放下一个动画之前完成播放,可以设置为 LottieCancellationBehavior.OnIterationFinish。 |
| 返回值 LottieAnimationState | |
2.3 显示控件
| @Composable fun LottieAnimation( composition: LottieComposition?, //传入加载结果 progress: () -> Float, //传入动画状态 modifier: Modifier = Modifier, outlineMasksAndMattes: Boolean = false, applyOpacityToLayers: Boolean = false, applyShadowToLayers: Boolean = true, enableMergePaths: Boolean = false, renderMode: RenderMode = RenderMode.AUTOMATIC, maintainOriginalImageBounds: Boolean = false, dynamicProperties: LottieDynamicProperties? = null, alignment: Alignment = Alignment.Center, contentScale: ContentScale = ContentScale.Fit, clipToCompositionBounds: Boolean = true, clipTextToBoundingBox: Boolean = false, fontMap: Map<String, Typeface>? = null, asyncUpdates: AsyncUpdates = AsyncUpdates.AUTOMATIC, safeMode: Boolean = false, ) | |
| 参数 outlineMasksAndMattes | 启用此选项可通过概述蒙版和遮罩来调试慢速动画,遮罩和遮罩的性能开销将与所有遮罩遮罩组合的表面积成正比,需要注意的是,千万不要在正式版本中启用此功能。 |
| 参数 applyOpacityToLayers | 设置是否对每个图层而不是形状应用不透明度。不透明度通常直接应用于形状。在半透明形状重叠的情况下,将不透明度应用于图层会更准确,但会牺牲性能。 |
| 参数 enableMergePaths | 启用实验性合并路径支持,大多数具有合并路径的动画都希望启用此功能,但合并路径支持比其他一些渲染功能更受限制,所以默认为关闭。 |
| 参数 dynamicProperties | 允许动态更改动画的属性,可以通过rememberLottieDynamicProperties 来使用(本文不再展开描述)。 |
| 参数 alignment | 如果动画的大小与此可组合项的大小不同,则定义应将动画放置在此可组合对象中的位置。 |
| 参数 contentScale | 如果动画的大小与此此可组合项不同,则定义应如何缩放动画。 |
本文介绍了如何在Android应用中使用Lottie-Compose库加载和操作动画,包括添加依赖、解析动画文件、处理网络加载失败、设置动画播放速度和迭代,以及动画控件的使用方法和配置选项。
414

被折叠的 条评论
为什么被折叠?



