如何设置Jetpack Compose动画预览默认显示指定时间帧?
在Jetpack Compose预览中指定动画默认显示帧
当然可以,以下是几种实用的实现方式:
1. 直接设置动画初始值为目标帧状态
如果你的动画基于animate*AsState这类API,不需要保留完整动画启动逻辑的话,直接把初始值设为你想要展示的时间帧对应的状态值即可。预览面板会直接渲染这个状态,而非动画的初始状态。
示例代码:
@Preview @Composable fun AnimatedComponentPreview() { // 直接将初始值设为动画进行到70%时的进度值 val progress by animateFloatAsState( targetValue = 1f, initialValue = 0.7f, animationSpec = tween(durationMillis = 1000) ) CircularProgressIndicator(progress = progress) }
2. 区分预览/运行环境控制状态
如果需要保留完整动画逻辑,但预览时默认停在指定帧,可以通过LocalInspectionMode判断当前是否处于预览模式,针对性设置状态值:
示例代码:
@Preview @Composable fun TargetFramePreview() { val isPreview = LocalInspectionMode.current val targetProgress = 0.5f // 想要展示的动画帧进度 val progress = remember { mutableStateOf(if (isPreview) targetProgress else 0f) } // 非预览环境下执行完整动画 if (!isPreview) { LaunchedEffect(Unit) { progress.animateTo(1f, animationSpec = tween(1000)) } } CircularProgressIndicator(progress = progress.value) }
3. 利用预览工具的专属配置(限部分场景)
部分Compose预览工具支持通过@Preview注解的扩展参数控制动画预览,但该功能没有全局通用的官方API,兼容性较差,因此更推荐前两种方法。
内容的提问来源于stack exchange,提问作者Juanje
相关产品推荐
相关产品推荐

