当前位置:网站首页>超人飞来!Flutter 实现满屏的力量感动画!
超人飞来!Flutter 实现满屏的力量感动画!
2022-08-08 19:48:00 【InfoQ】
前言
继续
Transition 系列动画组件的介绍,本篇来介绍
SizeTransition。
SizeTransition 用于更改子组件的尺寸来实现动画。支持垂直方向或水平方向修改动画,同时尺寸更改的起始位置可以从顶部、中部、底部(垂直方向)或左侧、中间、右侧(水平方向)开始。通过这写特性,我们可以构建组件飞入的效果。

SizeTransition 介绍
SizeTransition 的构造方法定义如下。
const SizeTransition({
Key? key,
this.axis = Axis.vertical,
required Animation<double> sizeFactor,
this.axisAlignment = 0.0,
this.child,
})
参数对应的说明如下:
axis:枚举,vertical标识纵向更改组件尺寸,即更改组件高度;horizontal表示横向更改组件尺寸,即更改组件宽度。
sizeFactor:即控制组件尺寸变化的Animation对象。实际上在动画过程中就是组件尺寸的宽度(horizontal)或高度(vertical)乘以**Animation<double>**的值。
axisAlignment:即动画过程中,子组件的对齐位置,默认为0.0,是从中间开始更改尺寸;当axis为vertical时,-1.0代表顶部对齐开始动画(即尺寸从上到下开始变大);当axis为horizontal时,开始的方向和文本的反向有关(TextDirection.ltr还是TextDirection.rtl),当文本为从左到右时(TextDirection.ltr,默认),-1.0表示从左侧开始动画(即尺寸从左到右开始变大)。
应用
对于我们的飞入动画来说,我们要实现从左向右飞入动画效果,因此需要设置
axis 为水平方向,然后
axisAligment 为右侧。对于图片,找一个横向飞行的超人,然后加上动画后就可以实现超人飞入的效果了。完整源码如下:
class SizeTransitionDemo extends StatefulWidget {
SizeTransitionDemo({Key? key}) : super(key: key);
@override
_SizeTransitionDemoState createState() => _SizeTransitionDemoState();
}
class _SizeTransitionDemoState extends State<SizeTransitionDemo>
with SingleTickerProviderStateMixin {
late AnimationController _controller =
AnimationController(duration: const Duration(seconds: 3), vsync: this)
..repeat();
//使用自定义曲线动画过渡效果
late Animation<double> _animation = CurvedAnimation(
parent: _controller, curve: Curves.fastLinearToSlowEaseIn);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SizeTransition'),
brightness: Brightness.dark,
backgroundColor: Colors.blue,
),
body: SizeTransition(
child: Center(
child: Image.asset(
'images/superman.png',
width: 300.0,
height: 300.0,
),
),
sizeFactor: _animation,
axis: Axis.horizontal,
axisAlignment: 1.0,
),
);
}
@override
void dispose() {
_controller.stop();
_controller.dispose();
super.dispose();
}
}
使用
SizeTransition
实现其他动画效果
我们可以设置动画从中间开始,这样会有一种卷轴打开的效果,比如我们找一幅卷轴画来看看效果。

这个动画的实现代码如下:
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('SizeTransition'),
brightness: Brightness.dark,
backgroundColor: Colors.blue,
),
body: Container(
alignment: Alignment.center,
child: SizeTransition(
child: Image.asset(
'images/juanzhou.png',
),
sizeFactor: _animation,
axis: Axis.horizontal,
axisAlignment: 0.0,
),
),
);
}
总结
本篇介绍了使用
SizeTransition 控制组件尺寸更改来实现飞入或展开的动画效果。
SizeTransition 也可以用于那种滑入滑出的动画场合,比如列表元素的插入使用下滑入,列表元素的删除使用上滑出。

边栏推荐
- 图的几种存储方式
- golang for循环详解
- 小白如何购买基金产品?
- BP neural network
- What are the latest developments in the handling of false information?KDD2022 "Fighting Misinformation and Responding to Media Bias" tutorial, 161 pages ppt
- 使用dedecms自带采集功能的文字过滤与替换
- 软考中级网络工程师全面学习笔记第2版(5万字)+配套视频及课件
- 黑猫带你学Makefile第6篇:Makefile重要规则
- 从 VLAN 到 IPVLAN: 聊聊虚拟网络设备及其在云原生中的应用
- What are the benefits of knowledge sharing for businesses?
猜你喜欢
随机推荐
小白如何购买基金产品?
聚名十周年线上庆典正式开启,发送祝福即有好礼相赠~
Securities account is better to choose which brokerage platform, which is more safe
Word清除格式在哪里?Word清除格式使用方法
软件测试基础笔记
IJCAI 2022 | 图神经网络可以检测到异常吗?
nyoj685 查找字符串(map)
启牛商学院开户是安全的吗?开户靠谱吗?
The difference between Redis' memory elimination strategy and expired deletion strategy
PyTorch入门:(三)Transforms的使用
黑猫带你学Makefile第3篇:Makefile基本语法
Michael Bronstein 系列长文:迈向几何深度学习(之三)——第一个几何神经网络模型
监控工具普罗米修斯(Prometheus)的介绍与安装
Canvans:绘制饼图和玫瑰饼图
黑猫带你学Makefile第4篇:Makefile中变量的使用
用 Antlr 重构脚本解释器
【无标题】
Monaco-Editor Multiplayer Collaboration Editor
nyoj714 Card Trick (The 6th Henan Province Programming Contest)
Codeforces Round #725 (Div. 3)









