外观
animengine 动画引擎
约 461 字大约 2 分钟
2026-07-15
animengine 使用 JSON 字符串描述一组对象属性动画。
local animengine = require("animengine")create
animengine.create(object, configString) -> animation| 参数 | 类型 | 说明 |
|---|---|---|
object | LVGL userdata | 动画目标 |
configString | string | JSON 动画描述 |
返回 animation userdata:
| 方法 | 参数 | 说明 |
|---|---|---|
start() | 无 | 启动动画 |
remove() | 无 | 停止并释放动画 |
modify(json) | JSON string | 修改已有动画配置 |
JSON 格式
{
"fromState": {
"rotate": 0
},
"toState": {
"rotate": 3600
},
"config": {
"duration": 1.0,
"interations": "1"
}
}内置表盘使用过的属性包括:
| 属性 | 说明 |
|---|---|
x / y | 坐标 |
rotate | 旋转;常见单位为 0.1 度 |
opacity | 不透明度 |
scale / img_zoom | 缩放 |
start_angle / end_angle | 弧线角度 |
custom_translate | 自定义平移 |
custom_rotate | 自定义旋转 |
duration 和 delay 在不同生成器中可能使用秒或毫秒。内置表盘模板以浮点秒传入;复杂状态对象也可能在单项中使用 duration、delay 和 ease。
拼写兼容
部分内置表盘使用 interations,而其他资料写作 iterations。目标设备可能只识别其中一种。新脚本应先用单次短动画验证,再决定采用哪一拼写。
旋转示例
local template = [[
{
"fromState": { "rotate": %d },
"toState": { "rotate": %d },
"config": { "duration": %f, "interations": "1" }
}
]]
local config = string.format(template, 0, 3600, 1.0)
local anim = assert(animengine.create(image, config))
anim:start()多属性示例
local config = [[
{
"fromState": {
"x": { "value": 0, "ease": ["ease_in_out", 5.0] },
"y": { "value": 0, "ease": ["ease_in_out", 5.0] }
},
"toState": {
"x": { "value": 120, "delay": 0, "duration": 1000 },
"y": { "value": 40, "delay": 0, "duration": 1000 }
},
"config": { "iterations": "1" }
}
]]
local anim = animengine.create(obj, config)
anim:start()生命周期
local animations = {}
local function start(obj, json)
local anim = animengine.create(obj, json)
animations[#animations + 1] = anim
anim:start()
return anim
end
function pageOnPause()
for _, anim in ipairs(animations) do anim:remove() end
animations = {}
end动画目标被删除后,animation userdata 不能继续使用。重复 remove() 或在对象销毁后 modify() 可能报错。
机型可用性
| Xiaomi Smart Band 10 Pro | Xiaomi Watch S4 41mm |
|---|---|
| ✅ | ✅ |