菜单 · 文档

最后更新:2026年8月12日

文档

整棵树上共用一套时钟:从 target 到 timeline 的大致路径。

动画概览

打开 animation 之后,一个 UI root 只有一个 AnimationHost 和一套时钟。ArkUI、Drawing、图表、布局和手势都共享同一套控制语义。

核心模型

Target + Property + Value

Animation / Keyframes

Timeline

AnimationControls

sample → compose → adapter commit

#[entry] 自动安装 host,业务组件不要重复 provider。

最小动画

let _target = use_animation_target("card");
let fade = Animation::new(
    AnimationSelector::Target(TargetName::owned("card")),
)
.tween(&OPACITY, 0.0, 1.0, TimeSpan::from_millis(240));

let controls = use_animation(
    Timeline::new().add(fade, TimelinePosition::START),
);

rsx! {
    column {
        button { onclick: move |_| controls.restart(), "播放" }
    }
}

target 尚未挂载时实例进入 Scheduled,节点可用后开始;同一 resolve scope 中重复 target 名会返回错误。

为什么使用 Timeline

Animation 描述某个 target/property 的变化,Timeline 描述多个变化、timer、call 和 barrier 的相对时间。Controls 只操作已解析计划,所以 play、pause、seek、reverse 和 cancel 在不同 adapter 上有一致语义。

章节地图

  • 属性与关键帧:值类型、easing、composition。
  • Timeline 编排:位置、label、回调和循环。
  • 播放控制:命令、快照、finished。
  • Stagger 与 Animatable:批量编排和 imperative retarget。
  • Layout 与 Presence:FLIP、进退场。
  • Drag 与 Scroll:手势驱动 timeline。
  • 后端与性能:sampled/native lowering 和诊断。