核心思路:三个工具的本质都是"改变属性"
在 Kanzi 中,UI 的外观和行为由属性 决定。
动画、状态机、属性插值 都是为了让属性发生变化,只是变化的方式和用途不同。
-
动画:按预设的时间线改变一个或多个属性 → 属性变化会触发绑定的更新 → 从而改变 UI。
-
状态机:根据逻辑状态切换,直接改变属性(可瞬间或过渡) → 属性变化同样触发绑定。
-
属性插值:让一个属性平滑地"跟随"另一个源属性 → 跟随过程中不断改变目标属性。
一、核心定义
| 概念 | 一句话定义 |
|---|---|
| 属性插值 | 让一个属性平滑地跟随另一个属性(或目标值)的变化,自动计算中间过渡。 |
| 状态机 | 定义一组离散的逻辑状态(如白天/黑夜),以及状态之间的切换规则。 |
| 动画 | 让一个或多个属性按照预设的时间曲线变化(关键帧、累加器等)。 |
二、行为特点对比
| 维度 | 属性插值 | 状态机 | 动画 |
|---|---|---|---|
| 变化方式 | 连续、动态跟随(起点=当前值,终点=目标值) | 离散跳转(可加过渡动画使其平滑) | 连续、预设路径(起点和终点固定) |
| 触发条件 | 监听的源属性值一改变就自动跟随 | 由用户交互、绑定、代码触发状态切换 | 需要显式调用 Play,或 Autoplay 自动播放 |
| 是否可循环 | 不支持循环,只做一次跟随 | 状态切换可双向多次发生 | 支持循环(Repeat Count / Infinite) |
| 是否可预设关键帧 | 否(只根据目标值插值) | 否(但切换时可加过渡动画) | 是(关键帧动画的本质) |
| 对动态目标值的响应 | 自动、实时响应任意变化 | 只能跳转到定义好的状态 | 不响应目标变化,只按预设路径执行 |
三、典型使用场景
| 工具 | 最适合做什么 |
|---|---|
| 属性插值 | 仪表盘指针、音量条、温度计等实时数据驱动的平滑指示器。 |
| 状态机 | 界面模式切换(白天/黑夜、登录/未登录、菜单展开/收起)、页面流控制。 |
| 动画 | 循环加载图标、进场/退场特效、进度条填充、复杂的关键帧特效(如充电线流动)。 |
四、组合使用示例
场景:一个按钮,点击后文字从"开"变"关",同时背景颜色从蓝渐变到红。
-
状态机 负责:定义
On/Off两个状态,并在每个状态下设置文字内容。 -
动画 负责:创建一段颜色渐变的关键帧动画。
-
状态机过渡动画 负责:在状态切换时,自动播放背景颜色的渐变过渡。
-
属性插值(可选):如果背景颜色要跟随某个实时数据(如温度)变化,则用插值器使其平滑移动。
五、理解记忆图
逻辑跳转 ←→ 状态机
视觉连续 ←→ 动画 / 属性插值
动画:预设路径,定时执行,适合重复或固定轨迹。
插值:动态跟随,随目标而变,适合实时数据。
六、一句话记住
状态机管"是什么模式",动画管"怎么按预设动",属性插值管"怎么平滑追随目标"。