Flutter 动画 Hero、更多动画示例

左手的ㄟ右手 2023-07-24 03:23 76阅读 0赞

文章目录

      • Hero 动画
        • 效果示例
      • 更多动画
        • 效果展示

Hero 动画

Android中有共享元素动画,能够实现页面之间共享元素的切换效果。Flutter 中也提供 相应的 Hero widget 实现该效果。

既然 Hero是个widget,按照惯例,我们来看看构造函数支持哪些字段:

  1. const Hero({
  2. Key key,
  3. @required this.tag, // 共享元素标识符,两个页面的 tag 需要一样且唯一
  4. this.createRectTween, // 定义目标 Hero 从起始路径 飞向目标路径时的边界变化。
  5. this.flightShuttleBuilder,// 可选替代,以提供在 Hero 动画执行期间显示的小部件。
  6. this.placeholderBuilder, //动画执行后,将占位符小部件保留为 Hero 的 child。
  7. this.transitionOnUserGestures = false, // 如果 PageRoute 转换是由用户手势(例如iOS上的向后滑动)触发的,是否执行 Hero 转换,默认是 false
  8. @required this.child, // 共享动画执行的 child
  9. })

比较常用的属性也就两个:tag 和 child,下面来看简单的示例

效果示例

该效果是从网格列表中点击 item 跳转到详情页面有一个过度的效果,这是使用了 Hero 动画实现共享动画。在这两个页面之间的共享元素是 展示的图片。

在这里插入图片描述

在实现以上效果的时候,为了保证tag的统一,我将它们放到常量类里面,统一调用.
在这里插入图片描述
在这里插入图片描述
但是使用的时候还是出现问题了。
在这里插入图片描述

  1. There are multiple heroes that share the same tag within a subtree.

大概意思就是说Hero存在多个相同的tag,导致的根本原因还没仔细研究。
不过既然是tag相同那么,保存tag唯一就行了。
这里文章的id是唯一的因此在tag中添加文章的id即可保证tag的唯一

  1. Container(
  2. color: Colors.grey,
  3. child:Hero(
  4. tag: '${Constant.heroPhotoDetail} $id', // 使用常量标识符 + id
  5. child: ExtendedImage.network(
  6. envelopePic,
  7. fit: BoxFit.fitWidth,
  8. ),
  9. )
  10. ),

详细代码实现可查看 YGragon/Flutter-WanAndroid 中的 photo_page 、photo_page_detail这两个包。

更多动画

  • 查看里面的视频讲解。https://flutter.dev/docs/development/ui/animations
  • Flutter提供的widget动画https://flutter.dev/docs/development/ui/widgets/animation

效果展示

以下效果来源于:https://flutter.dev/docs/development/ui/widgets/animation

  • AnimatedDefaultTextStyle
    在这里插入图片描述
  • AnimatedContainer
    在这里插入图片描述
  • AnimatedCrossFade
  • AnimatedOpacity
    在这里插入图片描述
  • AnimatedPhysicalModel
    在这里插入图片描述
  • AnimatedPositioned
    在这里插入图片描述
  • DecoratedBoxTransition
    在这里插入图片描述
  • FadeTransition
    在这里插入图片描述
  • PositionedTransition
    在这里插入图片描述
  • RotationTransition
    在这里插入图片描述
  • ScaleTransition
    在这里插入图片描述
  • SizeTransition

对自己的大小进行动画处理,然后裁剪并对齐其子级。

在这里插入图片描述

  • SlideTransition
    在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Flutter Animation动画

    一,概述    `  Flutter`动画库的核心类是`Animation`对象,它生成指导动画的值,`Animation`对象指导动画的当前状态(例如,是开始、停止还是

    相关 Flutter中的动画

    今天来学习一下Flutter中的动画。我们在js+css中,已经习惯用css3中的animation,transform,transition这三个加在一起去做。 我们像前端