Flutter比如说 | 显式动画组件
2023-03-05 12:16:16
),
),
);
}
}
classAnimationDemoextendsStatefulWidget{
@override
_AnimationDemoState createState=> _AnimationDemoState;
}
class_AnimationDemoStateextendsState< AnimationDemo>
withSingleTickerProviderStateMixin{
late AnimationController _controller;
@override
voidinitState{
_controller = AnimationController(
duration: Duration(seconds: 1),
vsync: this,
)..repeat;
super.initState;
}
@override
voiddispose{
_controller.dispose;
super.dispose;
}
@override
Widget build(BuildContext context){
returnRotationTransition(
turns: _controller,
child: FlutterLogo(size: 80),
);
}
}
上述code首先通过SingleTickerProviderStateMixin 获取ticker,并下定义了一个AnimationController且在initState初始化时将其动画化时长设立为1s,最后通过调用repeat方式使其周而复始放映,运行时均可推论到其姪基本FlutterLogo周而复始轴向为的动画化功效,如上图12-2所示。
■ 上图12‑2适用RotationTransition借助于轴向为功效
除了repeat(周而复始放映)外,动画化依靠器还支持forward(正序放映一次)、reverse(倒序放映一次)、stop(原地停止)、reset(移走)、animateTo(动画化至某个系将近后再进一步停下)等方式。
2
●
FadeTransition
这是一个专责转为变不可见度的显式动画化基本,可以算作隐式动画化AnimatedOpacity基本的显式动画化版,因此它可以被动画化依靠器加载,随时停止等。该基本专有名词与12.2.1节的RotationTransition大同小异,通过opacity模板发送到不可见度系将近,code如下:
FadeTransition(
opacity: _controller,
child: FlutterLogo,
)
例如可提均需一些按住让用户手动依靠动画化的进展,功效如上图12-3所示。
■ 上图12‑3适用FadeTransition手动依靠不可见度动画化
用作借助于上图12-3所示功效的清晰code如下:
//第12章/fade_transition_demo.dart
import'package:flutter/material.dart';
voidmain{
runApp(MyApp);
}
classMyAppextendsStatelessWidget{
@override
Widget build(BuildContext context){
returnMaterialApp(
home: Scaffold(
appBar: AppBar(title: Text( "FadeTransition Demo")),
body: Center(
child: AnimationDemo,
),
),
);
}
}
classAnimationDemoextendsStatefulWidget{
@override
_AnimationDemoState createState=> _AnimationDemoState;
}
class_AnimationDemoStateextendsState< AnimationDemo>
withSingleTickerProviderStateMixin{
late AnimationController _controller;
@override
voidinitState{
_controller = AnimationController(
duration: Duration(seconds: 1),
vsync: this,
);
super.initState;
}
@override
voiddispose{
_controller.dispose;
super.dispose;
}
@override
Widget build(BuildContext context){
returnRow(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
FadeTransition(
opacity: _controller,
child: FlutterLogo(size: 80),
),
ElevatedButton(
child: Text( "开始"),
onPressed: => _controller.repeat(reverse: true),
),
ElevatedButton(
child: Text( "停止"),
onPressed: => _controller.stop,
),
],
);
}
}
除此以外,上例的开始按住调用_controller.repeat方式时风行了reverse: true模板,该模板的作用是每当动画化依靠器放映完结(系将近为1.0)时,倒序放映一遍,再进一步周而复始黄金时段。换言之,当没有风行该模板时,动画化依靠器选项的周而复始放映是从0.0交替至1.0,然后瞬间移走至0.0,再进一步周而复始放映,而设立reverse后,周而复始放映的道德上不会改以从0.0交替至1.0,再进一步从1.0交替至0.0,借以周而复始放映。
3
●
ScaleTransition
这是一个可以缩放姪基本的显式动画化基本,专有名词与其他显式动画化基本更加加相似,不同点在于它能够通过scale模板发送到缩放倍将近,code如下:
ScaleTransition(
scale: _controller,
child: FlutterLogo,
)
例如当scale为2.0时,姪基本不会被放大为原本的2倍,而当scale为0.5时,则姪基本就不会被缩小为原本的一半。
4
●
SizeTransition
这是一个引导ClipRect 对姪基本跨度完成打印的显式动画化基本,运行时通过sizeFactor要素系将近决定对姪基本的打印道德上,code如下:
SizeTransition(
sizeFactor: _controller,
child: FlutterLogo,
)
例如当sizeFactor的系将近从1.0交替至0.0时,可推论到姪基本逐渐被打印至实质上消失的功效,如上图12-4所示。该基本选项道德上是沿度角方向里心打印,如有必要,也可通过风行axis: Axis.horizontal改以沿水平方向打印,或通过axisAlignment要素转为变打印的对齐方式。
■ 上图12‑4适用SizeTransition对姪基本完成打印动画化
12.2.3节讲解的ScaleTransition的内部是通过Transform 基本对姪基本碎裂,从而在绘制时超越缩放的功效,而这里的SizeTransition则是通过直接转为变自身跨度,并配合ClipRect对姪基本打印,在布局时超越能够的动画化功效,然而在Flutter布局里,基本的跨度必须考虑到父级强制执行,因此拦截机里要注意该基本的父级强制执行不说是紧强制执行,否则无法推论到动画化功效。对基本强制执行等概念不感兴趣的听众可参考资料本书第6章“进阶布局”里关于“强制执行”的内容可,对Transform 碎裂或ClipRect打印等内容可不感兴趣的听众可查看本书第14章“过场与特效”里对这2个基本的讲解。
5
●
SideTransition
这是一个专责标量的显式动画化基本,适用时需通过position 要素风行一个Animation Offset 对此侧向持续性,通常引导Tween借助于,code如下:
SlideTransition(
position: Tween(
begin: Offset( 0, 0),
end: Offset( 0.5, -1.2),
).animate(_controller),
child: FlutterLogo( size: 100),
)
上述code通过Tween的begin模板将动画化起始右边下定义为Offset(0,0),又通过end模板将完结右边下定义为Offset(0.5, -1.2)。这些系将近是指比起于该基本的跨度,即应由初始右边偏移的比例,因此动画化起始的(0,0)就对此原地不动,而完结右边的(0.5, -1.2)理论上对此的是向后静止0.5倍于整个姪基本的跨度,并侧向静止1.2倍于姪基本的高度。若姪基本的跨度为100×100一个单位,则理论上动画化时长内基本不会向后标量50一个单位,并同时侧向标量120一个单位。
6
●
PositionedTransition
这个PositionedTransition是隐式动画化AnimatedPositioned基本的显式动画化版,因此这2个基本都与第1章讲解的普通Positioned基本一样,可在Stack里适用,code如下:
Stack(
children: [
PositionedTransition(
rect: RelativeRectTween(
begin: RelativeRect.fromLTRB( 0, 0, 200, 200),
end: RelativeRect.fromLTRB( 100, 100, 0, 0),
).animate(_controller),
child: FlutterLogo( size: 100),
),
],
)
这里除此以外,该基本的rect模板能够的类型为Animation RelativeRect ,可由动画化依靠器接在RelativeRectTween获取。通过RelativeRect.fromLTRB构造函将近,自由软件可同时指定left、top、right、bottom 这4个方向的系将近,专有名词与Positioned基本的同名模板更加加值得注意。
7
●
DecoratedBoxTransition
这个基本是普通DecoratedBox 的显式动画化版,需由decoration 模板发送到类型为Animation Decoration 的系将近,一般由DecorationTween提均需,code如下:
DecoratedBoxTransition(
decoration: DecorationTween(
begin: BoxDecoration(
color: Colors.grey,
borderRadius: BorderRadius.circular( 50.0),
),
end: BoxDecoration(
color: Colors.black,
borderRadius: BorderRadius.zero,
),
).animate(_controller),
child: FlutterLogo( size: 100),
)
运行时该基本不会由黑色的圆形室内装饰,交替至紫色的矩形室内装饰,如上图12-5所示。
■ 上图12‑5适用DecoratedBoxTransition对姪基本完成打印动画化
这个基本看似没有相异的隐式动画化基本,但其实第7章讲解的AnimatedContainer基本就支持decoration要素,也不会在decoration系将近改变时系统会接踵而来隐式动画化功效,可实质上当作该基本的隐式动画化版。对DecoratedBox基本或BoxDecoration类不感兴趣的听众可参考资料本书第14章“过场与特效”里的就其内容可。
8
●
AnimatedIcon
AnimatedIcon顾名思义,是一个用作提均需动画化徽标的基本。它的拼法虽然是以Animated...标题的,但它其实是一个显式动画化基本,能够通过progress要素风行动画化依靠器,另外还能够由icon要素风行动画化徽标将近据,code如下:
AnimatedIcon(
progress: _controller,
icon: AnimatedIcons.arrow_menu,
)
■ 上图12‑6AnimatedIcon之arrow_menu的动画化功效
上图12-7列出了目前Flutter外置的14种动画化徽标,以及它们相异的英文名称,均需听众参考资料。
■ 上图12‑7Flutter外置的14种动画化徽标及英文名称
03
参考资料读物
《Flutter 基本成文与拦截机》
ISBN:978-7-302-59420-8
[加] 王浩然(Bradley Wang) 撰写
定价:109元
04
难忘推荐
账号小程序游戏开发│猜倍将近迷你游戏(于其源码+录像带)
Flink程序语言系统化│Scala程序语言初级概念化
Flink程序语言系统化│FlinkCEP程序语言概念化
Flink程序语言系统化│DataStream API程序语言概念化
Flink程序语言系统化│DataSet API程序语言概念化
将近 据分析拦截机│客户价系将近分析
统计分析拦截机│商品价格得出结论关键时刻
统计分析拦截机│时间氨基酸得出结论
统计分析拦截机│KaggleTitanic生存得出结论
。天津妇科医院预约挂号武汉看癫痫去哪家医院
江西男科去哪看
广东妇科病治疗费用
福州哪家医院治疗早泄阳痿最好
下一篇: 论续航,试问谁是Redmi K50的宿敌
- 油混SUV价格比被打下来了!入门9.99万,油耗4.2个,家用适合吗?
- 南渝先生:道家 结“圣胎”的大成仙术
- 新光期货:日内异动品种点评——尿素反弹结束?
- 飘了?动辄七八十万,国产车越发贵
- 兄弟姐妹一到晚上睡觉就咳嗽!要排查一下这5个原因
- 豆油近期累库显著 玉米反弹行情接近头部区域内
- 完美L8值不值买?看完就知道了!
- 生猪:收储提振市场信心 现货这两项见底
- 上海新增以外无症状感染者1例!又3个区发布大筛安排,汇总→
- 再走中国最无可国道------德贡公路
- 美国制造业在6月出现下降 黄金短线仍略微偏向多头
- 肝血管瘤实在很可怕吗?
- AE86为什么是地球磁场神车?
- CBOT小麦大涨,基准期约收高有约5%
- 长春市卫生肥胖症委员会关于新冠肺炎疫情情况通报
- 同一价位,后庄电车用料哪个好?使用成本差多少?算笔账就清楚了
- 关于成都市双流区部分区域缩减风险等级的通告(9月17日)
- 达利国际(00608.HK):2022年纯利1.54亿港元 末期净每股0.12港元
- 让家人吃出肥胖
- 爸爸病重丈夫要求AA,公婆除夕来过年,儿女:年夜饭8000先付再说