【问题标题】:Infinite rotation of an Image in Jetpack ComposeJetpack Compose 中图像的无限旋转
【发布时间】:2021-07-15 00:05:05
【问题描述】:
如何让我的图片无限旋转?
这是我的代码,但动画不起作用
val angle: Float by animateFloatAsState(
targetValue = 360F,
animationSpec = infiniteRepeatable(
tween(2000))
)
Image(
painter = painterResource(R.drawable.sonar_scanner),
"image",
Modifier
.fillMaxSize()
.rotate(angle),
contentScale = ContentScale.Fit
)
【问题讨论】:
标签:
android
animation
android-jetpack-compose
【解决方案1】:
您可以通过rememberInfiniteTransition 使用InfiniteTransition。
类似的东西
val infiniteTransition = rememberInfiniteTransition()
val angle by infiniteTransition.animateFloat(
initialValue = 0F,
targetValue = 360F,
animationSpec = infiniteRepeatable(
animation = tween(2000, easing = LinearEasing)
)
)
只是一个注释。
而不是使用
Modifier.rotate(angle)
你可以使用
Modifier
.graphicsLayer {
rotationZ = angle
}
您可以查看文档:
如果您有由androidx.compose.runtime.State 或动画值支持的图层属性,则首选此版本,因为读取block 中的状态只会导致图层属性更新,而不会触发重组和重新布局。
【解决方案2】:
在我看来,对于此类用例,您应该为无限动画使用预定义的 API。
val infiniteTransition = rememberInfiniteTransition()
val angle by infiniteTransition.animateFloat(
initialValue = 0f,
targetValue = 360f,
animationSpec = infiniteRepeatable(
animation = keyframes {
durationMillis = 1000
}
)
)