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

flutter 动画

flutter 动画

动画介绍

  • 帧率 FPS(Frame Per Second),即每秒的动画帧数。帧率越高则动画就会越流畅!
  • 动画抽象类
    • Animation
      • value:获取动画的当前状态值
      • addListener():用于给 Animation 添加帧监听器
      • addStatusListener():给 Animation 添加“动画状态改变”监听器
    • Curve:动画曲线
      • linear:匀速的
      • decelerate:匀减速
      • ease:开始加速,后面减速
      • easeIn:开始慢,后面快
      • easeOut:开始快,后面慢
      • easeInOut:开始慢,然后加速,最后再减速
      • 自定义正弦曲线
        class ShakeCurve extends Curve {double transform(double t) {return math.sin(t * math.PI * 2);}
        }
        
    • AnimationController:动画控制器
      • forward():启动正向动画
      • stop():停止
      • reverse():启动反向动画
      • duration:动画时长
    • Tween:定义从输入范围到输出范围的映射
      • begin
      • end
      • animate()

动画状态监听

  • addStatusListener():添加动画状态改变监听器
  • AnimationStatus:动画状态
    • dismissed:动画在起始点停止
    • forward:动画正在正向执行
    • reverse:动画正在反向执行
    • completed:动画在终点停止

自定义路由切换动画

  • 使用 PageRouteBuilder
Navigator.push(context,PageRouteBuilder(transitionDuration: Duration(milliseconds: 500), //动画时间为500毫秒pageBuilder: (BuildContext context, Animation animation,Animation secondaryAnimation) {return FadeTransition(//使用渐隐渐入过渡,opacity: animation,child: PageB(), //路由B);},),
);
  • 继承 PageRoute 类
  • Hero 动画

交织动画

  • 原理
    • 1.要创建交织动画,需要使用多个动画对象(Animation)
    • 2.一个 AnimationController 控制所有的动画对象,控制器的值必须在 0.0 到 1.0 之间
    • 3.给每一个动画对象指定时间间隔(Interval),给不同动画创建一个 Tween 用于指定不同属性的开始值和结束值
  • 示例
    • 实现一个柱状图增长的动画:
      1、开始时高度从 0 增长到 300 像素,同时颜色由绿色渐变为红色;这个过程占据整个动画时间的 60%。
      2、高度增长到 300 后,开始沿 X 轴向右平移 100 像素;这个过程占用整个动画时间的 40%。
// 定义动画widget:
class StaggerAnimation extends StatelessWidget {StaggerAnimation({Key? key,required this.controller,}) : super(key: key) {//高度动画height = Tween<double>(begin: .0,end: 300.0,).animate(CurvedAnimation(parent: controller,curve: const Interval(0.0, 0.6, //间隔,前60%的动画时间curve: Curves

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 软件测试学习笔记丨Chrome开发者模式
  • [Day 65] 區塊鏈與人工智能的聯動應用:理論、技術與實踐
  • Neo4j导入csv数据,并创建节点
  • Vue3 pinia
  • C++设计模式6:适配器模式
  • 使用GitHub Actions的Self-hosted runner
  • leetcode541:反转字符串II
  • io进程----文件io
  • 8月27日,每日信息差
  • 【深度学习】爱因斯坦求和约定
  • STM32 - 笔记3
  • 最新网站服务器CC压力测试系统源码
  • 开源 AI 智能名片 O2O 商城小程序在社交私域中的圈层价值
  • 【卡梅德生物】羊驼单抗定制:从单B细胞筛选到应用
  • Web开发:通过Quatz开启定时任务调度的基础demo
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • Docker下部署自己的LNMP工作环境
  • go语言学习初探(一)
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java 实战开发之spring、logback配置及chrome开发神器(六)
  • MD5加密原理解析及OC版原理实现
  • mysql 5.6 原生Online DDL解析
  • passportjs 源码分析
  • storm drpc实例
  • UEditor初始化失败(实例已存在,但视图未渲染出来,单页化)
  • Vue.js-Day01
  • Webpack 4 学习01(基础配置)
  • 第十八天-企业应用架构模式-基本模式
  • 动态规划入门(以爬楼梯为例)
  • 服务器之间,相同帐号,实现免密钥登录
  • 关于使用markdown的方法(引自CSDN教程)
  • 面试遇到的一些题
  • 深度学习在携程攻略社区的应用
  • 一些css基础学习笔记
  • 智能网联汽车信息安全
  • Hibernate主键生成策略及选择
  • 通过调用文摘列表API获取文摘
  • 组复制官方翻译九、Group Replication Technical Details
  • ​决定德拉瓦州地区版图的关键历史事件
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • # Redis 入门到精通(一)数据类型(4)
  • # 数论-逆元
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • (11)MATLAB PCA+SVM 人脸识别
  • (2024,Flag-DiT,文本引导的多模态生成,SR,统一的标记化,RoPE、RMSNorm 和流匹配)Lumina-T2X
  • (55)MOS管专题--->(10)MOS管的封装
  • (TOJ2804)Even? Odd?
  • (附源码)springboot建达集团公司平台 毕业设计 141538
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (新)网络工程师考点串讲与真题详解
  • (续)使用Django搭建一个完整的项目(Centos7+Nginx)
  • (原創) 如何讓IE7按第二次Ctrl + Tab時,回到原來的索引標籤? (Web) (IE) (OS) (Windows)...
  • .Net 6.0 处理跨域的方式
  • .NET C# 使用 iText 生成PDF
  • .NET Core 和 .NET Framework 中的 MEF2