Kotlin compose 实现Image 匀速旋转

代码逻辑:

@Composable

fun ShowLoading() {

val rotation = remember { Animatable(0f) }

// 开启旋转动画

LaunchedEffect(isRotating) {

launch {

rotation.animateTo(

targetValue = 360f,

animationSpec = infiniteRepeatable(

animation = tween(

durationMillis = 5000,

easing = LinearEasing

),

repeatMode = RepeatMode.Restart

)

)

}

}

// 旋转的图片 - rotate(rotation.value)

Image(

painter = painterResource(id = R.mipmap.xxx),

contentDescription = null,

modifier = Modifier.wrapContentSize().padding(15.dp).rotate(rotation.value)

)

}

代码详细解释:

  1. val rotation = remember { Animatable(0f) }:
  • 这行代码使用 remember 初始化一个 Animatable 对象,并设置初始值为 0f

  • Animatable 用于表示一个可以随时间变化的动画值。

  • remember 函数确保该状态在重新组合(recomposition)时得以保留。

  1. LaunchedEffect(isRotating):
  • LaunchedEffect 是一个用于管理副作用的 Compose API,它会在 isRotating 状态发生变化时执行其中的代码块。

  • isRotating 是一个触发动画的条件变量(虽然在代码中没有定义它,假设是由外部传入或控制的状态)。

  1. launch:
  • LaunchedEffect 中使用 launch 启动一个协程,以异步方式执行旋转动画。

  • rotation.animateTo 是动画的核心,设置了目标值为 360f,即图片将旋转 360 度。

  • animationSpec 是动画的规格,这里使用了 infiniteRepeatable,表示动画将无限循环。

  • tween 定义了动画的持续时间为 5000 毫秒(即5秒),并使用 LinearEasing 使动画匀速进行。

  • repeatMode = RepeatMode.Restart 表示动画在每次循环时从头开始。

  1. Image 组件:
  • Image 用于显示图片。它通过 painterResource 加载资源 ID 为 R.mipmap.xxx 的图片。

  • modifier 是 Compose 中用于修饰 UI 元件的属性,这里通过 Modifier 组合了一些修饰符:

    • wrapContentSize() 使图片保持其原始大小。

    • padding(15.dp) 添加15dp的内边距。

    • rotate(rotation.value) 将图片按当前的旋转值进行旋转,rotation.value 是动画过程中不断变化的值。

相关推荐
@淡 定5 分钟前
Spring Boot 的配置加载顺序
java·spring boot·后端
龙大大L9 分钟前
第五章:5.3 ESP32物联网应用:阿里云IoT平台与腾讯云IoT平台的数据上传与远程控制
java·物联网·struts·esp32
alexhilton28 分钟前
理解Jetpack Compose中副作用函数的内部原理
android·kotlin·android jetpack
s91236010134 分钟前
rust REGEX和lazy_static 和struct 混用
java·前端·javascript
pyengine37 分钟前
基于pandoc的MarkDown格式与word相互转换小工具开发(pyqt5)
开发语言·python·qt·word
YuSun_WK43 分钟前
配置MambaIRv2: Attentive State Space Restoration的环境
开发语言·python
Nick_zcy44 分钟前
开发基于python的商品推荐系统,前端框架和后端框架的选择比较
开发语言·python·前端框架·flask·fastapi
淬渊阁1 小时前
Go package
java·开发语言
CoderCodingNo1 小时前
【GESP】C++二级真题 luogu-B4259 [GESP202503 二级] 等差矩阵
java·c++·矩阵
佳腾_1 小时前
【Web应用服务器_Tomcat】二、Tomcat 核心配置与集群搭建
java·前端·中间件·tomcat·web应用服务器