动画简介

设计精良的动画使 UI 感觉更直观,有助于打造精致应用程序的时尚外观和感觉,并改善用户体验。Flutter 的动画支持使实现各种动画类型变得容易。许多小部件,特别是 Material 小部件,都带有其设计规范中定义的标准运动效果,但也可以自定义这些效果。

选择一种方法

在 Flutter 中创建动画时,你可以采用不同的方法。哪种方法适合你?为了帮助你做出决定,请查看视频,如何选择适合你的 Flutter 动画小部件?(也作为 配套文章 发布。)

(要深入了解决策过程,请观看 Flutter 中的动画做得很好 视频,在 Flutter Europe 上展示。)

如视频所示,以下决策树可帮助你在实现 Flutter 动画时决定使用哪种方法

The animation decision tree

如果预打包的隐式动画(最容易实现的动画)满足你的需求,请观看 使用隐式动画的动画基础知识。(也作为 配套文章 发布。)

通过隐式动画了解动画基础知识

要创建自定义隐式动画,请观看使用 TweenAnimationBuilder 创建自己的自定义隐式动画。(还以配套文章的形式发布。)

了解如何使用 TweenAnimationBuilder 构建自定义隐式动画

要创建显式动画(由您控制动画,而不是让框架控制),您可以使用其中一个内置的显式动画类。有关更多信息,请观看使用内置显式动画制作您的第一个方向动画。(还以配套文章的形式发布。)

如果您需要从头开始构建显式动画,请观看使用 AnimatedBuilder 和 AnimatedWidget 创建自定义显式动画。(还以配套文章的形式发布。)

要更深入地了解动画在 Flutter 中的工作原理,请观看动画深度剖析。(还以配套文章的形式发布。)

Codelab、教程和文章

以下资源是开始学习 Flutter 动画框架的不错起点。这些文档中的每一篇都展示了如何编写动画代码。

动画类型

一般来说,动画要么是补间动画,要么是基于物理的动画。以下部分解释了这些术语的含义,并指出了可以了解更多信息的资源。

补间动画

补间的简称。在补间动画中,定义了开始点和结束点,以及时间线和定义过渡时间和速度的曲线。框架计算如何从开始点过渡到结束点。

上面列出的文档(例如 动画教程)并不是专门针对补间的,但它们在示例中使用了补间。

基于物理的动画

在基于物理的动画中,运动被建模为类似于现实世界的行为。例如,当你抛出一个球时,它何时何地着陆取决于它被抛出的速度以及它距离地面的距离。类似地,将一个连接到弹簧上的球掉落,它的掉落(和反弹)方式与将一个连接到绳子上的球掉落的方式不同。

预制动画

如果你正在使用 Material 小部件,你可能会查看 pub.dev 上提供的 动画包。此包包含针对以下常用模式的预制动画:Container 转换、共享轴过渡、淡入过渡和淡出过渡。

常见动画模式

大多数 UX 或运动设计师发现,在设计 UI 时会重复使用某些动画模式。本部分列出了一些常用的动画模式,并告诉你可以在哪里了解更多信息。

动画列表或网格

此模式涉及对列表或网格中的元素添加或移除动画。

  • AnimatedList 示例
    此演示来自 示例应用目录,展示了如何对列表添加元素或移除选定元素的动画。当用户使用加号 (+) 和减号 (-) 按钮修改列表时,内部 Dart 列表会同步。

共享元素过渡

在此模式中,用户从页面中选择一个元素(通常是图像),然后 UI 将所选元素以动画形式移动到包含更多详细信息的新页面。在 Flutter 中,你可以使用 Hero 小部件轻松地在路由(页面)之间实现共享元素过渡。

  • Hero 动画 如何创建两种风格的 Hero 动画
    • Hero 在从一个页面飞到另一个页面时会改变位置和大小。
    • Hero 的边界在从一个页面飞到另一个页面时会改变形状,从圆形变为方形。
  • 另请参阅 HeroNavigatorPageRoute 类的 API 文档。

交错动画

分解为较小动作的动画,其中一些动作被延迟。较小的动画可能是顺序的,也可能部分或完全重叠。

其他资源

通过以下链接了解有关 Flutter 动画的更多信息