一、Flutter中的动画的基本概念图

二、Flutter各动画的概念

  • 视图动画
    • 补间动画
      • 就是一个View,定义了起点和终点、时间以及运动曲线,并按照所定规则由起点运动到终点的过程。
    • 帧动画
      • 帧动画就是将N张图片按照一定是时间循环播放产生的视觉动画效果
  • 基于物理的动画
    • 就是一个View按照现实世界物体运动的曲线去运动。例如:1、当你掷球时,它在何处落地,取决于抛球速度有多快、球有多重、距离地面有多远。
  • 共享元素动画
    • 当A页面跳转到B页面的时候,A页面的某个view会按照特定规则移动到B页面某个view的位置,产生动画。
  • 第三方动画库
    • 由一些开原作者开发的动画框架。
      • Lottie
      • Flare

三、Flutter基础动画类简析

  • Animation
    • Animation是一个在一段时间内一次生成一组区间值的类。它本身包含有动画执行时的当前值和动画执行的状态。
    • Animation类在输出动画当前值的时候可以是线性的、曲线的、或者其它任何可以输出的一组值的特定规则。
    • Animation可以控制动画的正向运行、反向运行甚至可以从动画运行的中间切换方向。
    • Animation可以生成大多数值。例如Animation<double、int、Color、Size、EdgeInsets等>。
    • Animation可以从value属性中获取动画当前值,也可以从addStatusListener((status){})中获取当前动画的状态。
    • Animation本身是一个abstract class,并不参与Weight的绘制,所以Animation与Weight的绘制没有任何关系。
// Animation的创建
final Animation<double> temp = new Tween<double>(begin: 0,end: 1)
.animate(_controller);
  • AnimationContorller
    • AnimationContorller继承自Animation,它是Animation的实现类。屏幕刷新的每一帧,它都会生成一个值。默认的情况下,它是在特定时间生成0.0-1.0之间的值。
    • AnimationContorller可以控制动画的播放。例如:forward()启动动画、reverse()反向执行、stop()停止动画。
    • AnimationController产生的区间数字与屏幕的刷新有关,在生成每个数字后,每个Animation对象会调用添加的Listener。这时我们就可以在value中拿到每次刷新的值。
    • AnimationController再创件的时候需要一个vsync参数,此参数的作用就是当Weight不在当前屏幕内中时,则会停止当前动画,减少不必要的资源消耗。需要Stateful添加SingleTickerProviderStateMixin到类中。
    • vsync对象会绑定动画的定时器到一个可视的widget,所以当widget不显示时,动画定时器将会暂停,当widget再次显示时,动画定时器重新恢复执行,这样就可以避免动画相关UI不在当前屏幕时消耗资源。 如果要使用自定义的State对象作为vsync时,请包含TickerProviderStateMixin。
// AnimationController创建
final AnimationController controller = new AnimationController(
duration: const Duration(milliseconds: 2000), vsync: this);
// 添加 SingleTickerProviderStateMixin
class _AnimState extends State<NonlinearAnim> with SingleTickerProviderStateMixin {
//...
}
  • Tween
    • 默认情况下,AnimationController创建的区间值是0.0-1.0,如果需要自定义区间值和值类型的话,就需要使用Tween来生成不同范围的数或者类型。
    • 要使用Tween对象,请调用其animate()方法,传入一个控制器对象。
// double类型
final Tween doubleT = new Tween<double>(begin: -100.0, end: 100.0);
// color类型
final Tween colorT = new ColorTween(begin: Colors.transparent, end: Colors.black54);
// EdgeInsets
final Tween edgeInsetT = new EdgeInsetsTween(begin: EdgeInsets.only(left: 0, top: 0),
end: EdgeInsets.only(left: 100, top: 150));
// ... // 使用Tween
final AnimationController controller = new AnimationController(
duration: const Duration(milliseconds: 200), vsync: this);
Animation<int> alpha = new IntTween(begin: 0, end: 100).animate(controller);
  • CurvedAnimation
    • CurvedAnimation将动画定义为一个非线性曲线。
    • CurvedAnimation的创建需要两个参数,一个是AnimationContorller(这里不多讲),另一个则是Curve。
    • Curve的线性曲线Flutter定义了很多。点击链接查看Demo。当然也可自己创建。
// 自定义Curve
class ShakeCurve extends Curve {
@override
double transform(double t) {
return math.sin(t * math.PI * 2);
}
}

参考文献:

Flutter-动画-概念篇的更多相关文章

  1. 转:Flutter动画二

    1. 介绍 本文会从代码层面去介绍Flutter动画,因此不会涉及到Flutter动画的具体使用. 1.1 Animation库 Flutter的animation库只依赖两个库,Dart库以及phy ...

  2. 转:Flutter动画一

    1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的An ...

  3. Flutter 动画详解(一)

    本文主要介绍了动画的原理相关概念,对其他平台的动画做了一个简要的梳理,并简要的介绍了Flutter动画的一些知识. 1. 动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才 ...

  4. 《Flutter 动画系列一》25种动画组件超全总结

    动画运行的原理 任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称&q ...

  5. OpenGL10-骨骼动画原理篇(2)

    接上一篇的内容,上一篇,简单的介绍了,骨骼动画的原理,给出来一个 简单的例程,这一例程将给展示一个最初级的人物动画,具备多细节内容 以人走路为例子,当人走路的从一个站立开始,到迈出一步,这个过程是 一 ...

  6. 《Flutter 动画系列》组合动画

    老孟导读:在前面的文章中介绍了 <Flutter 动画系列>25种动画组件超全总结 http://laomengit.com/flutter/module/animated_1/ < ...

  7. 【转】android 电容屏(二):驱动调试之基本概念篇

    关键词:android  电容屏 tp 工作队列 中断 多点触摸协议平台信息:内核:linux2.6/linux3.0系统:android/android4.0 平台:S5PV310(samsung ...

  8. 我的TDD实践---TDD概念篇

    “我的TDD实践”系列之TDD概念篇 写在前面: 我的TDD实践这几篇文章主要是围绕测试驱动开发所展开的,其中涵盖了一小部分测试理论,更多的则是关注工具的使用及环境的搭建,做到简单实践先行,后理论专精 ...

  9. DNA拷贝数变异CNV检测——基础概念篇

    DNA拷贝数变异CNV检测——基础概念篇   一.CNV 简介 拷贝数异常(copy number variations, CNVs)是属于基因组结构变异(structural variation), ...

  10. OpenGL10-骨骼动画原理篇(3)-Shader版本代码已经上传

    视频教程请关注 http://edu.csdn.net/lecturer/lecturer_detail?lecturer_id=440 接上一个例程OpenGL10-骨骼动画原理篇(2),对骨骼动画 ...

随机推荐

  1. weight权重的属性

    权重是把屏幕剩余空间按比例分配 控件使用0dp,则实际的宽度比就等于权重比 控件wrap_content,那么权重越大,位置占的越多,再小不过wrap_content 控件match_parent,那 ...

  2. 01 MySQL之数据库基本操作

    01-介绍 数据库(DataBase,DB)是一个长期存储在计算机内的.有组织的.有共享的.统一管理的数据集合. 02-基本操作 2.1 创建数据库 # 查看当前所有的数据库 show databas ...

  3. Java中非静态成员变量、静态成员变量的初始化时机

    转: Java中非静态成员变量.静态成员变量的初始化时机. 2018年05月22日 11:48:11 SilenceCarrot 阅读数 421   版权声明:技术就要分享才有意思,欢迎大家分享(注明 ...

  4. 部署k8s时容器中ping不通

    192.168.42.120 | UNREACHABLE! => {    "changed": false,     "msg": "Fail ...

  5. 在SuSE安装wifidog认证服务器和网关

    在SuSE安装认证服务器和网关 在openSuSE 10.3安装wifidog 认证服务器和网关在同台设备中安装完毕.以下是openSuSE的详细安装指南.这个安装是非常初级的,所以请验证或更正. - ...

  6. CentOS7+rsync+sersync实现数据实时同步

    一.全网数据备份方案 1.需要备份的文件目录有(原则上,只要运维人员写入或更改的数据都需要备份)./data,/etc/rc.local,/var/spool/cron/root等,根据不同都服务器做 ...

  7. 数学建模python matlab 编程(指派问题)

    指派授课问题 现有A.B.C.D四门课程,需由甲.乙.丙.丁四人讲授,并且规定: 每人只讲且必须讲1门课:每门课必须且只需1人讲. 四人分别讲每门课的费用示于表中: 课 费用 人 A B C D 甲 ...

  8. 【AMAD】django-activity-stream

    动机 简介 个人评分 动机 为你的django站点生成活动流(类似facebook feed).用户可以在个人feed页面看到订阅的人的活动流. 简介 django-activity-stream1中 ...

  9. thinkPHP 出现route不起作用提示No input file specified.

    修改.htaccess文件 原因在于使用的PHP是fast_cgi模式,而在某些情况下,不能正确识别path_info所造成的错误. 打开.htaccess 在RewriteRule 后面的index ...

  10. Eslint常用命令

    Eslint常用命令 自动修复(针对整个项目) npm run lint -- --fix 运行如上命令,eslint 会自动修复一些简单的错误. 全局安装 npm install -g eslint ...