如何在Android Studio Compose动画预览中永久保存初始与目标值?
解决Compose Animation Preview永久保存目标值的问题
目前Compose的Animation Preview本身没有提供直接保存动画目标值的@Preview参数——因为每次预览重载都会完全重建Compose组件树,默认状态会被重置。不过可以通过以下两种可靠方式实现永久固定目标值为1.0f:
1. 为预览组件单独硬编码目标值
在预览专用的Composable中直接传入固定的目标值,和业务代码分离,这样每次预览重载都会自动使用该值:
// 实际业务组件,接收外部传入的目标值 @Composable fun AnimatedFloatComponent(targetValue: Float) { val animatedValue = animateFloatAsState( targetValue = targetValue, animationSpec = tween(durationMillis = 1000) ) // 动画UI实现示例:基于动画值偏移Box Box( modifier = Modifier .size(120.dp) .offset(x = animatedValue.value * 60.dp) .background(Color.Cyan) ) } // 预览组件,固定传入目标值1.0f @Preview(showBackground = true) @Composable fun AnimatedFloatComponentPreview() { AnimatedFloatComponent(targetValue = 1.0f) }
2. 使用PreviewParameterProvider提供固定参数
如果需要复用固定参数,或者想更灵活地管理预览参数,可以定义一个PreviewParameterProvider,返回固定的1.0f序列:
// 定义预览参数提供者,固定返回1.0f class FixedTargetValueProvider : PreviewParameterProvider<Float> { override val values = sequenceOf(1.0f) } // 预览组件通过@PreviewParameter接收固定值 @Preview(showBackground = true) @Composable fun AnimatedFloatComponentPreview( @PreviewParameter(FixedTargetValueProvider::class) targetValue: Float ) { AnimatedFloatComponent(targetValue = targetValue) }
注意:remember无法解决预览重载重置问题
虽然remember可以在组件重组时保存状态,但预览重载是完全销毁并重建整个Compose树,remember保存的状态会被清空,因此这种方式对预览重载无效。
内容的提问来源于stack exchange,提问作者JaviCasa
相关产品推荐
相关产品推荐

