博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Flutter之内置动画(转)
阅读量:5234 次
发布时间:2019-06-14

本文共 6619 字,大约阅读时间需要 22 分钟。

AnimatedContainer

AnimatedCrossFade
Hero
AnimatedBuilder
DecoratedBoxTransition
FadeTransition
PositionedTransition/RelativePositionedTransition
RotationTransition
ScaleTransition
AlignTransition
SizeTransition
SlideTransition
AnimatedDefaultTextStyle
AnimatedListState
AnimatedModalBarrier
AnimatedOpacity
AnimatedPhysicalModel
AnimatedPositioned
AnimatedSize
AnimatedWidget
AnimatedWidgetBaseState

AnimatedContainer

属性改变, 根据设定的时间过渡大小颜色位移等, 类似transition  属性变化的动画

GestureDetector(  onTap: () {    setState(() {      widget.width = 100.0;    });  },  child: AnimatedContainer(    duration: Duration(seconds: 2),    width: widget.width,    height: 200.0,    color: Colors.red,    child: Text('test'),    padding: EdgeInsets.only(bottom: 100.0),    curve: Curves.bounceOut,  ),)

 

AnimatedCrossFade

一个widget,在两个孩子之间交叉淡入,并同时调整他们的尺寸, firstChild 在一定时间逐渐变成 secondChild  整个元素变化的动画

AnimatedCrossFade(  firstChild: Container(    width: 100.0,    height: 100.0,    color: Colors.green,    child: Text('123'),  ),  secondChild: Container(    width: 200.0,    height: 100.0,    color: Colors.red,    child: Text('456'),  ),  crossFadeState: widget.first ? CrossFadeState.showFirst : CrossFadeState.showSecond,  duration: Duration(seconds: 2))

Hero

AnimatedBuilder

用于构建动画的通用小部件。用它包裹可以实现根据animation变化而变化的动画

AnimatedBuilder(  animation: animation2,  builder: (BuildContext ctx, Widget child) {    return Container(      transform:          Matrix4.translationValues(0, animation2.value, 0),      alignment: Alignment.topLeft,      padding: EdgeInsets.fromLTRB(40.0, 30.0, 40.0, 0.0),      child: Column(        children: 
[ Container( alignment: Alignment.topLeft, child: Text( '我是标题', style: TextStyle(fontSize: 18.0), ), ), Container( padding: EdgeInsets.only(top: 10.0), alignment: Alignment.topLeft, child: Text('我是内容啦啦啦啦'), ) ], ), ); },)

DecoratedBoxTransition

DecoratedBox的动画版本,可以给它的Decoration不同属性使用动画

 

Animation
animationTest;AnimationController controllerTest;controllerTest = new AnimationController( duration: const Duration(milliseconds: 2000), vsync: this);animationTest = DecorationTween( begin: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(0.0)), color: Colors.red ), end: BoxDecoration( borderRadius: BorderRadius.all(Radius.circular(20.0)), color: Colors.green )).animate(controllerTest);DecoratedBoxTransition( decoration: animationTest, child: Container( width: 100.0, height: 100.0, ))

FadeTransition

对透明度使用动画的widget  透明度的包装动画, 比直接用Opacity封装简单, 不如AnimatedOpacity方便

Animation
animationTest;AnimationController controllerTest; controllerTest = new AnimationController( duration: const Duration(milliseconds: 2000), vsync: this);animationTest = new Tween(begin: 1.0, end: 0.0).animate(controllerTest);FadeTransition( opacity: animationTest, child: Container( width: 100.0, height: 100.0, decoration: BoxDecoration( color: Colors.red, border: Border.all(color: Colors.green, width: 10.0), borderRadius: BorderRadius.all(Radius.circular(20.0)), ), ))

 

PositionedTransition/RelativePositionedTransition

Positioned的动画版本,它需要一个特定的动画来将孩子的位置从动画的生命周期的起始位置移到结束位置。

 

Animation
animationTest;AnimationController controllerTest; controllerTest = new AnimationController( duration: const Duration(milliseconds: 2000), vsync: this);animationTest = RelativeRectTween( begin: RelativeRect.fromLTRB(200.0, 200.0, 200.0, 200.0), end: RelativeRect.fromLTRB(20.0, 20.0, 20.0, 20.0)) .animate(controllerTest); Stack(children:
[ PositionedTransition( rect: animationTest, child: GestureDetector( onTap: () { controllerTest.forward(); }, child: Container( width: 100.0, height: 100.0, color: Colors.red, ), ), )]),

RotationTransition

对widget使用旋转动画 1~360°

RotationTransition(    turns: new Tween(begin: 0.0, end: 0.5).animate(controllerTest),    child: Container(      width: 100.0,      height: 100.0,      color: Colors.red,      child: Text('12345678'),    ))

ScaleTransition

对widget使用缩放动画

ScaleTransition(    scale: new Tween(begin: 1.0, end: 0.5).animate(controllerTest),    child: Container(      width: 100.0,      height: 100.0,      color: Colors.red,      child: Text('12345678'),    ))

AlignTransition

挪到中间

SizeTransition

宽度或者高度缩放

SizeTransition(    axis: Axis.horizontal, //控制宽度或者高度缩放    sizeFactor:        new Tween(begin: 1.0, end: 0.5).animate(controllerTest),    child: Container(      width: 100.0,      height: 100.0,      color: Colors.red,      child: Text('12345678'),    ))

SlideTransition

对相对于其正常位置的某个位置之间使用动画  Offset是相对于自己移动的百分比

SlideTransition(    position: new Tween(      begin: Offset(0.0, 0.0),      end: Offset(0.5, 0.3),    ).animate(controllerTest),    child: Container(      width: 100.0,      height: 100.0,      color: Colors.red,      child: Text('12345678'),    ))

AnimatedDefaultTextStyle

在文本样式切换时使用动画

AnimatedDefaultTextStyle(child: Text('1234567'), style: TextStyle(    color: widget.color  ), duration: Duration(seconds: 2))

AnimatedListState

动画列表的state  AnimatedListdemo用

AnimatedModalBarrier

一个阻止用户与widget交互的widget

AnimatedOpacity

Opacity的动画版本,在给定的透明度变化时,自动地在给定的一段时间内改变孩子的Opacity

 

AnimatedOpacity(    opacity: widget.opacity,    duration: Duration(seconds: 2),    child: Container(      width: 100.0,      height: 100.0,      color: Colors.black,    ))

 

AnimatedPhysicalModel

PhysicalModel的动画版本  阴影动画

AnimatedPhysicalModel(    duration: Duration(seconds: 2),    shape: BoxShape.rectangle,    elevation: 20.0,    color: Colors.transparent,    shadowColor: widget.color,    child: Container(      width: 100.0,      height: 100.0,      color: Colors.black,    ))

 

 

AnimatedPositioned

动画版本的Positioned,每当给定位置的变化,自动在给定的时间内转换孩子的位置。

相对于PositionedTransition简单一些, 但是功能相对单一

Stack(children: 
[ AnimatedPositioned( width: widget.width, duration: Duration(seconds: 2), child: GestureDetector( onTap: (){ setState(() { widget.width = 100.0; }); }, child: Container( width: 100.0, height: 100.0, color: Colors.red, ), ) )]),

 

AnimatedSize

动画widget,当给定的孩子的大小变化时,它自动地在给定时间内转换它的大小。

AnimatedWidget

当给定的Listenable改变值时,会重新构建该widget

AnimatedWidgetBaseState

具有隐式动画的widget的基类

 

原文:https://blog.csdn.net/weixin_43929882/article/details/88531433

转载于:https://www.cnblogs.com/ckAng/p/10778550.html

你可能感兴趣的文章
我是插件狂人,jDuang,jValidator,jModal,jGallery
查看>>
android中fragment的使用及与activity之间的通信
查看>>
jquery的contains方法
查看>>
python3--算法基础:二分查找/折半查找
查看>>
Perl IO:随机读写文件
查看>>
转:基于用户投票的排名算法系列
查看>>
linux后台运行和关闭SSH运行,查看后台任务
查看>>
cookies相关概念
查看>>
CAN总线波形中ACK位电平为什么会偏高?
查看>>
MyBatis课程2
查看>>
桥接模式-Bridge(Java实现)
查看>>
如何破解域管理员密码
查看>>
Windows Server 2008 R2忘记管理员密码后的解决方法
查看>>
IE11兼容IE8的设置
查看>>
windows server 2008 R2 怎么集成USB3.0驱动
查看>>
Foxmail:导入联系人
查看>>
vue:axios二次封装,接口统一存放
查看>>
vue中router与route的区别
查看>>
js 时间对象方法
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>