合成渲染器
自从avalonia的11更新以来,动画可以分为显示动画和隐式动画:
显式动画 (Explicit Animations)
- 定义: 手动从代码中触发的动画,类似于 WPF/传统 Avalonia 中的
BeginAnimation。 - 用途: 用于精确控制某个属性在特定时间内的变化。
- 优势: 可以脱离 UI 线程运行,避免卡顿。
隐式动画 (Implicit Animations)
- 定义: 当
CompositionVisual的某个属性(如Offset)发生变化时,渲染器会自动触发的动画。 - 用途: 主要用于平滑布局变化。例如,当一个控件的父容器改变其位置时,控件不是瞬间跳到新位置,而是平滑地过渡过去。
- 优势: 极大地简化了平滑布局过渡的代码,开发者无需手动编写动画逻辑。
每个 Avalonia 控件在新的渲染器中都有一个对应的 CompositionVisual 实例。它是所有合成属性(如 Offset、Opacity 等)的持有者。ImplicitAnimations 属性,这是实现隐式动画的核心。它是一个集合,将 属性名称 映射到 动画对象。当映射的属性发生变化时,与之关联的动画就会自动播放。
而Vector3KeyFrameAnimation用于定义隐式动画的类型。例如,用于动画化 CompositionVisual 的 Offset 属性(该属性是 Vector3 类型)。