kuikly-animation
Kuikly 动画系统开发助手(Kuikly DSL)。指导如何使用声明式动画(animate + 响应式变量)和命令式动画(animateToAttr + ViewRef)实现 opacity、backgroundColor、transform(位移/缩放/旋转/倾斜)、frame 等属性动画,涵盖 Animation 曲线配置、串行/并行动画编排、动画取消与循环等高级模式。当用户在 Kuikly 中需要实现动画效果、排查动画不生效、进行复杂动画编排时使用。
Kuikly 动画系统
核心概念
Kuikly 动画描述视图从状态 A 到状态 B 的属性过渡过程。三大要素:
- 可动画属性:transform(位移/缩放/旋转/倾斜)、opacity、backgroundColor、frame(位置和大小)
- Animation 对象:控制动画曲线、时长、延迟、是否循环
- 触发方式:声明式(响应式变量驱动)或命令式(直接调用 animateToAttr)
两种动画方式对比
| 特性 | 声明式动画 | 命令式动画 |
|---|---|---|
| 触发方式 | 响应式变量变化自动触发 | 手动调用 animateToAttr |
| 核心 API | attr { animate(animation, value) } |
viewRef?.view?.animateToAttr(animation) { ... } |
| 适用场景 | 简单状态切换动画 | 复杂动画编排、串行动画 |
| 结束回调 | event { animationCompletion { } } |
completion 参数回调 |
| 推荐度 | 简单动画首选 | 复杂动画推荐 |
Animation 对象
动画曲线类型
// 基础曲线
Animation.linear(durationS, key = "") // 线性
Animation.easeIn(durationS, key = "") // 先慢后快
Animation.easeOut(durationS, key = "") // 先快后慢
Animation.easeInOut(durationS, key = "") // 两端慢中间快
// 弹簧曲线(额外参数:damping 阻尼, velocity 初速度)
Animation.springLinear(durationS, damping, velocity, key = "")
Animation.springEaseIn(durationS, damping, velocity, key = "")
Animation.springEaseOut(durationS, damping, velocity, key = "")
Animation.springEaseInOut(durationS, damping, velocity, key = "")
动画过程控制
Animation.linear(0.5f)
.delay(0.3f) // 延迟 0.3 秒启动
.repeatForever(true) // 无限循环
参数说明
| 参数 | 类型 | 说明 |
|---|---|---|
| durationS | Float | 动画持续时间(秒) |
| key | String | 动画标识,animationCompletion 回调中用于区分动画 |
| damping | Float | 弹簧阻尼系数 |
| velocity | Float | 弹簧初始速度 |
可动画属性与 Transform 类
Transform 类型
| 类 | 构造参数 | 说明 |
|---|---|---|
Translate(percentageX, percentageY) |
X/Y 位移百分比 [-1,1],可超出 | 位移,支持 offsetX/offsetY (dp) |
Scale(x, y) |
缩放比例 [0, max] | 缩放 |
Rotate(angle) |
角度 [-360, 360] | 2D 旋转(围绕 Z 轴) |
Rotate(angle, xAngle, yAngle) |
各轴角度 | 3D 旋转 |
Skew(horizontalAngle, verticalAngle) |
倾斜角度 (-90, 90) | 倾斜 |
Anchor(x, y) |
锚点 [0, 1] | transform 中心点,默认 (0.5, 0.5) |
transform 方法签名
fun transform(
rotate: Rotate = Rotate.DEFAULT,
scale: Scale = Scale.DEFAULT,
translate: Translate = Translate.DEFAULT,
anchor: Anchor = Anchor.DEFAULT,
skew: Skew = Skew.DEFAULT
)
// 便捷重载(只传单个 transform 类型)
fun transform(rotate: Rotate)
fun transform(scale: Scale)
fun transform(translate: Translate)
fun transform(skew: Skew)
声明式动画快速入门
var flag by observable(false)
View {
attr {
size(100f, 100f)
backgroundColor(if (ctx.flag) Color.GREEN else Color.RED)
animate(Animation.linear(0.5f), ctx.flag)
}
}
// 触发动画
flag = true
详细用法(animate 作用域、同级作用域、父子作用域):见 DECLARATIVE_ANIMATION.md
命令式动画快速入门
var viewRef: ViewRef<DivView>? = null
View {
ref { ctx.viewRef = it }
attr {
size(100f, 100f)
backgroundColor(Color.RED)
}
}
// 触发动画
viewRef?.view?.animateToAttr(Animation.linear(0.5f), attrBlock = {
backgroundColor(Color.GREEN)
}, completion = { finished ->
// finished: true=完成, false=被取消
})
详细用法:见 IMPERATIVE_ANIMATION.md
高级动画模式
串行动画、并行动画、动画中途启动、动画取消等:见 ANIMATION_PATTERNS.md
More from tencent-tds/kuiklyui-ai
kuikly-coroutines-threading
Kuikly 协程与多线程编程助手。指导如何在 Kuikly 中进行异步编程,包括 Kuikly 内建协程、kotlinx 协程、kuiklyx 协程库。当用户在 Kuikly 中需要执行异步任务、切换线程、使用协程、回到 Kuikly 线程更新 UI、排查线程安全问题时使用。
54kuikly-compose-interop-dsl
Compose DSL 混用 Kuikly DSL 完整开发助手。指导如何在 Compose DSL 页面中嵌入 Kuikly DSL 组件(DeclarativeBaseView / ViewContainer)及在 Compose 中调用 Kuikly Module。当用户需要在 Compose 页面中复用 Kuikly DSL 组件、封装原生 View 为 Composable、在 Compose 中调用 Kuikly Module时使用。
53kuikly-expand-view
Kuikly 自定义 View 开发助手。指导如何创建自定义 UI 组件,将原生 View 暴露给 Kuikly 侧使用。覆盖完整开发流程:Kuikly 侧组件定义、各平台 Native 侧实现(Android/iOS/鸿蒙ArkTS/H5/小程序)及使用。当用户需要自定义扩展 UI 组件时使用。
52kuikly-multi-module-config
Kuikly 多模块工程配置助手。指导如何创建 Kuikly 子模块、配置多模块。当用户需要创建新 Kuikly 子模块、配置多模块参数、解决 KuiklyCoreEntry 入口类冲突时使用。
51kuikly-visibility-exposure
Kuikly 曝光与可见性事件开发助手(Kuikly DSL)。指导如何使用 didAppear、didDisappear、willAppear、willDisappear、appearPercentage 五种可见性事件实现组件曝光上报、可见百分比监听、列表项曝光统计等功能。当用户在 Kuikly 中需要实现曝光上报、可见性监听、列表项曝光统计、可见百分比计算等场景时使用。
51kuikly-reactive-observer
Kuikly 响应式更新与指令系统开发助手(Kuikly DSL)。指导如何使用 observable、observableList、observableSet 实现 UI 响应式更新,以及 vfor、vforIndex、vforLazy、vif、velseif、velse、vbind 等指令的正确用法。当用户在 Kuikly 中需要以下场景时使用:(1) 声明响应式字段并绑定到 UI 属性 (2) 列表渲染(vfor/vforIndex/vforLazy) (3) 条件渲染(vif/velseif/velse) (4) 值绑定渲染(vbind) (5) 高效列表更新(diffUpdate) (6) 响应式数据不生效、UI 不更新等问题排查 (7) observableList/observableSet 的增删改操作 (8) 复杂对象的响应式更新策略
49