当前位置: 首页 > news >正文

Flutter开发基础之动画专题

Flutter开发基础之动画专题

动画设计的作用是让UI界面更流畅、直观,能够有效的提升用户体验。
在Flutter开发中,动画分为多个方面:
基础动画、页面交互动画、绘图动画、矩阵变换等。
Flutter开发基础

基本动画

常用的基本动画有透明度动画、缩放动画、旋转动画、平移动画等。

  1. 透明度动画
    AnimatedOpacity可以实现基本的透明度变化动画,适用于简单的过渡场景。
    AnimatedOpacity(opacity: opacity,duration: duration,curve: curve,onEnd: onEnd,child: child,)

可以通过设置目标opacity,将child初始opacity修改为目标opacity
FadeTransition可以和AnimationController配合实现子Widget的透明度变换,绑定的AnimationController控制动画的开始与结束。

    FadeTransition(opacity: opacity,child: child,)

在这里对应的State需要绑定SingleTickerProviderStateMixin,如果有多个AnimationController需要绑定TickerProviderStateMixinSingleTickerProviderStateMixinTickerProviderStateMixin都实现于TickerProviderTickerProvider用来发送Ticker对象,Ticker对象的作用是获取每一帧刷新的通知;
Ticker受到SchedulerBinding的驱动,锁屏后会停止刷新,可以避免资源浪费。

  1. 缩放动画
    ScaleTransition可以和AnimationController配合构建缩放动画效果,此缩放是等比例的。
    ScaleTransition(scale: scale,alignment: alignment,child: child,filterQuality: filterQuality,)
  1. 旋转动画
    RotationTransition配合AnimationController实现旋转效果。
    RotationTransition(turns: turns,alignment: alignment,filterQuality: filterQuality,child: child,)
  1. 平移动画
    SlideTransition配合AnimationControllerAnimation<Offset>实现对子Widget的平移变换。
    SlideTransition(position: position,transformHitTests: transformHitTests,textDirection: textDirection,child: child,)

Widget还可以直接配合TweenAnimationController实现动画效果,这里的Tween就是AnimationTween有一下几种:

ColorTweenColor切换动画
DecorationTweenContainer的Decoration变化
BoxConstraintsTween针对ConstrainedBox使用
EdgeInsetsTween一般用于padding或margin变化
BorderTween边框变换动画
BorderRadiusTween边框圆角变换动画
Matrix4Tween矩阵变换动画
TextStyleTween文本样式过渡动画
TweenSequence串行动画,是动画序列的组合动画
ConstantTween常量值动画,一般与TweenSequence配合组合动画
SizeTweensize变换动画
RectTweenrect变换动画
StepTween与TweenAnimationBuilder配合使用,可显著提高动画效率

Widget动画还可以通过AnimatedWidget实现,AnimatedWidget会封装好setState状态更新,通过Listenable监听Widget动画;
AnimatedBuilder继承自AnimatedWidget,对AnimatedWidget做了优化。
AnimatedModalBarrier继承自AnimatedWidget,可以防止用户与身后的子Widget交互。
SpringSimulation可以和SpringDescription配合AnimationController实现阻尼效果。

页面交互动画

Flutter中可以通过Hero组件来组合不同路由页面的过渡元素,通过使用相同的tag绑定不同的Widget,确保不同的Widget完成过渡。

    Hero(tag: tag,createRectTween: createRectTween,flightShuttleBuilder: flightShuttleBuilder,placeholderBuilder: placeholderBuilder,transitionOnUserGestures: transitionOnUserGestures,child: child,)

若过渡效果不满意,可以配合PageRouteBuilder实现自定义Hero动画效果。
当需要对相邻或有关联的Widget进行切换过渡时可以使用AnimatedSwitcher实现。

    AnimatedSwitcher(duration: duration,reverseDuration: reverseDuration,switchInCurve: switchInCurve,switchOutCurve: switchOutCurve,transitionBuilder: transitionBuilder,layoutBuilder: layoutBuilder,child: child,)

绘图动画

绘图动画是Canvas结合Path绘制自定义图形,对于完整的Path可以通过PathMetric分解获得任一截数据,形成新的Path
在一定时间内逐步绘制一部分Path实现画线效果,我们可以同过自定义一个CustomPainter配合AnimationController实现动画效果。

    CustomPaint(painter: painter,foregroundPainter: foregroundPainter,size: size,isComplex: isComplex,willChange: willChange,child: child,)
http://www.lryc.cn/news/337862.html

相关文章:

  • PHP 图片裁剪类封装
  • Android 14.0 SystemUI修改状态栏电池图标样式为横屏显示
  • FPGA:图像数字细节增强算法(工程+仿真+实物,可用毕设)
  • Android netty的使用
  • 苹果电脑启动磁盘是什么意思 苹果电脑磁盘清理软件 mac找不到启动磁盘 启动磁盘没有足够的空间来进行分区
  • 【Java SE】多态
  • Yarn vs npm的大同小异Yarn是什么?
  • 1.Godot引擎|场景|节点|GDS|介绍
  • springboot3 redis 实现分布式锁
  • 2024年第十四届MathorCup数学应用挑战赛A题思路分享(妈妈杯)
  • 运动听歌哪款耳机靠谱?精选五款热门开放式耳机
  • Kubernetes学习笔记12
  • Qt Designer 控件箱中的控件介绍及布局比列分配
  • 蓝桥集训之三国游戏
  • MySQL知识整理
  • 代码随想录算法训练营第36天| 435. 无重叠区间、 763.划分字母区间*、56. 合并区间
  • SpringBoot整合Nacos
  • vue3 浅学
  • 三小时使用鸿蒙OS模仿羊了个羊,附源码
  • 如何使用 ArcGIS Pro 制作热力图
  • SpringBoot之集成Redis
  • mybatis-plus与mybatis同时使用别名问题
  • MySQL基础知识——MySQL日志
  • uniapp 地图分幅网格生成 小程序基于map组件
  • python项目练习——22、人脸识别软件
  • Linux中账号登陆报错access denied
  • python语言之round(num, n)小数四舍五入
  • 安全风险攻击面管理如何提升企业网络弹性?
  • 常用的几款性能测试软件
  • 谷歌google浏览器无法更新Chrome至最新版本怎么办?浏览器Chrome无法更新至最新版本