在这个Google Codelab (Mars Photos) 中,当 Coil 加载图像时,应用程序会显示一个进度轮。代码使用此 XML 文件作为可绘制对象:
并使用此代码来显示它:
@Composable
fun LoadingScreen(modifier: Modifier = Modifier) {
Box(
contentAlignment = Alignment.Center,
modifier = modifier.fillMaxSize()
) {
Image(
modifier = Modifier.size(200.dp),
painter = painterResource(R.drawable.loading_img),
contentDescription = stringResource(R.string.loading)
)
}
}
但是,这只能显示静态图像。我希望它旋转(这是我当然期望的行为)。我想到了一些方法,但我都不太喜欢:
- 定义 12 个类似的 XML 文件,每个旋转度一个,并按顺序连续显示每个文件
- 动态生成 XML 并以某种方式将其动态转换为画家
- 使用 Coil 加载 GIF
有没有更简单的方法来完成这项任务? 有没有办法以编程方式旋转图像本身,例如应用某种预定义的动画模式(可能类似于 basicMarquee)?
以下是相同的代码。此代码取自https://github.com/SmartToolFactory/Compose-ProgressIndicator,它有许多其他旋转圆形进度视图动画。
val infiniteTransition = rememberInfiniteTransition()
用于无限过渡动画,RepeatMode.Restart 表示动画重新启动,给人一种无限动画的感觉。rotate((angle.toInt() + i) * coefficient) {
旋转项目的位置。所有角度计算均以弧度为单位。您可以根据需要自定义它。您不需要图像。绘制线条或矩形,然后通过旋转来为其中几个添加动画效果。