Flutter Hero 实现共享元素转场动画

news/2025/2/12 5:29:19/

系列文章

  1. Flutter 旋转动画 — RotationTransition
  2. Flutter 平移动画 — 4种实现方式
  3. Flutter 淡入淡出与逐渐出现动画
  4. Flutter 尺寸缩放、形状、颜色、阴影变换动画
  5. Flutter 列表Item动画 — AnimatedList实现Item左进左出、淡入淡出
  6. Flutter Hero 实现共享元素转场动画
  7. Flutter Hero 实现径向变换动画 — 圆形变成矩形的转场动画
  8. Flutter 自定义动画 — 数字递增动画和文字逐行逐字出现或消失动画

文章目录

  • 系列文章
  • 1 动画效果
  • 2 Hero介绍
  • 3 未使用Hero时的页面切换
  • 4 使用Hero实现的转场动画


1 动画效果

在这里插入图片描述


2 Hero介绍

Hero 是Flutter提供的一个可以实现子Widget在页面切换时带有飞行效果的Widget,可实现元素共享动画效果。

实现方式:在2个页面之间,都使用Hero包裹子控件并设置相关的tag标识即可。

注意:同一个页面中不能使用多个相同的Hero Tag

3 未使用Hero时的页面切换

列表页面

class ListPage extends StatefulWidget {const ListPage({Key? key}) : super(key: key);@overrideState<StatefulWidget> createState() => _ListPageState();
}class _ListPageState extends State<ListPage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('列表页'), centerTitle: true),body: GridView.count(crossAxisCount: 2,children: List.generate(10, _buildItem),),);}Widget _buildItem(int index) {return CupertinoButton(padding: EdgeInsets.zero,onPressed: () {Navigator.of(context).push(MaterialPageRoute(builder: (context) => DetailPage(index: index)),);},child: _buildImageWidget(index),);}// 列表页的Image size是120Widget _buildImageWidget(int index) {return const FlutterLogo(size: 120);}
}

详情页面

class DetailPage extends StatefulWidget {final int index;const DetailPage({Key? key, required this.index}) : super(key: key);@overrideState<StatefulWidget> createState() => _DetailPageState();
}class _DetailPageState extends State<DetailPage> {@overrideWidget build(BuildContext context) {return Scaffold(appBar: AppBar(title: const Text('详情页'), centerTitle: true),body: SizedBox(width: double.infinity,child: Column(mainAxisSize: MainAxisSize.min,children: [const SizedBox(height: 12),_buildImageWidget(widget.index),const SizedBox(height: 12),Text(' ${widget.index} :登高(作者:杜甫)',style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 20),),const SizedBox(height: 12),const Text('风急天高猿啸哀,\n渚清沙白鸟飞回。\n无边落木萧萧下,\n不尽长江滚滚来。''\n万里悲秋常作客,\n百年多病独登台。\n艰难苦恨繁霜鬓,\n潦倒新停浊酒杯。\n',textAlign: TextAlign.center,style: TextStyle(color: Colors.black, fontSize: 15),),],),),);}// 详情页的Image size是250Widget _buildImageWidget(int index) {return const FlutterLogo(size: 250);}
}

效果图

在这里插入图片描述


4 使用Hero实现的转场动画

实现Widget切换页面时飞到下一页的动画,使用Hero Widget包裹列表与详情页的图片Widget,并设置相同的tag即可。
修改 _buildImageWidget,使用Hero包裹FlutterLogo,并传入唯一的tag

列表页

  // 列表页的Image size是120Widget _buildImageWidget(int index) {// 同一页面的hero不能有多个相同tagreturn Hero(tag: 'hero_tag_$index',child: const FlutterLogo(size: 120),);}

详情页

  // 详情页的Image size是250Widget _buildImageWidget(int index) {return Hero(tag: 'hero_tag_$index',child: const FlutterLogo(size: 250),);}

动画效果

在这里插入图片描述


http://www.ppmy.cn/news/142589.html

相关文章

【Flutter】Hero 动画 ( Hero 动画使用流程 | 创建 Hero 动画核心组件 | 创建源页面 | 创建目的页面 | 页面跳转 )

文章目录 ◯、Hero 动画简介一、创建 Hero 动画核心组件二、创建源页面三、创建目的页面四、页面跳转五、完整代码示例六、相关资源 ◯、Hero 动画简介 Hero Widget 动画效果 : Hero 通过动画从 源界面 运动到 目标界面 时 , 目标界面 透明度逐渐增加 , 淡入显示 ; Hero 是界面…

31、Flutter之Hero动画

Flutter Hero动画 Hero指的是可以在路由(页面)之间“飞行”的widget。使用Flutter的Hero widget创建hero动画。将 hero从一个路由飞到另一个路由。将 hero 的形状从圆形转换为矩形&#xff0c;同时将其从一个路由飞到另一个路由的过程中进行动画处理。Flutter中的Hero widget实…

hero登录器服务器列表为空,Hero引擎登陆器配置图文教程

1.首先启动配置器,如图: 2.游戏列表格式,也就是登录器左边显示的游戏区,保存为文本文件,例如GameList.txt 以下是设置4个区时登录器显示的样子,此文件需要保存在你网站的空间中,如上图 按照如下格式设置好你的游戏区后,并且配置好后启动登录器效果如下图: [电信区] ServerName=…

习题Hero

&#xff08;1&#xff09;定义一个游戏中Hero 英雄的类&#xff0c;在该类中定义英雄的名字&#xff0c; 生命值和等级3 个属性&#xff0c;定义一个构造函数完成对生命值和等级的初始化&#xff0c;分别赋初值为100&#xff0c;1。同时实现名字的输入和英雄信息的输出。 &am…

《Flutter 控件大全》第五十二个:Hero

如果你对Flutter还有疑问或者技术方面的疑惑,欢迎加入Flutter交流群(微信:laomengit)。同时也欢迎关注我的Flutter公众号【老孟程序员】,公众号首发Flutter的相关内容。Flutter地址:http://laomengit.com 里面包含160多个组件的详细用法。Hero是我们常用的过渡动画,当用…

Hero

Theres a hero 有一位英雄 If you look inside your heart 如果你探寻你的内心 You dont have to be afraid 你不必担心害怕 Of what you are 自己是谁 Theres an answer 有一种答案 If you reach into your soul 如果你深入自己的灵魂 And the sorrow that you know 你所经历的…

SwiftUI中应用Hero动画(Hero Animation)时一些需要填的坑

功能需求 从SwiftUI 2.0开始(iOS 14.0),Apple提供了视图间更自然的变换动画,我们可以据此来实现所谓的Hero Animation,即“英雄动画”效果: 注意上面动画演示里顶部用户信息面板中,单个视图是如何无缝连接收起和展开两个操作的:大家可能认为是同一个视图从下方移动到上方…

android hero动画,主动画 (Hero animations)

主动画 (Hero animations) 你将会在这里学到: What you’ll learn Hero 指的是在屏幕间飞跃的 widget。 The hero refers to the widget that flies between screens. 用 Flutter’s Hero widget 创建 hero 动画。 Create a hero animation using Flutter’s Hero widget. 使 …