Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >Flutter动画【1】

Flutter动画【1】

作者头像
flyou
发布于 2019-08-06 09:11:35
发布于 2019-08-06 09:11:35
84100
代码可运行
举报
文章被收录于专栏:flutter开发者flutter开发者
运行总次数:0
代码可运行

Hello 好久不见,我没消失,这不,又给大家更新教程了,笔芯

在前面的文章中我们花了很多的时间去讲了Flutter中的Widget以及用户操作,但是我们却很少去关注与用户的交互效果,当然这并不会导致我们的程序崩溃或者不能实现某个功能,但是它真的会使我们应用程序没有“灵性”,总让人觉得少了些什么,对啊,动画!

说到动画,相比大家对动画都不陌生,当然可能最先接触的应该是flash吧,一般指的是从一种状态到另一种状态的改变,或者说大小、形状、位置的改变。

在Flutter中的动画分为补间(Tween)动画和基于物理(Physics-based)的动画,由于篇幅原因我们今天就先来看下补间动画,当然也是我们接触比较多的动画类型。

补间动画的基本支持类

在Flutter中Animation对象是Flutter动画库中的一个核心类,它生成指导动画的值,没错它仅仅用来生成动画的值,这些值并不会直接没改变界面的展示效果。

Animation对象知道动画的当前状态(例如,它是开始、停止还是向前或向后移动),但它不知道屏幕上显示的内容。

在Flutter中我们使用AnimationController来管理动画,控制动画的开始、结束与快慢。

CurvedAnimation 可以说是动画的插值器,负责控制动画的行为,如是先快再慢还是先快再慢等。

入门补间动画

Animation在Flutter中是一个抽象类,我们并不能直接来是使用它,但是我们可以使用Tween这个子类来使用它。

我们可以使用addListener回调来监听动画值的改变,可以使用addStatusListener回调来监听动画状态的变更

刚刚我们说过,使用Animation并不能直接改变Widget,它只能生成一系列的值,那么到底是不是这样呢?我们还是看个例子

每次我们点击floatingActionButton都会触发动画开始的操作,然后通过监听把当前动画的值打印到控制台上。

代码语言:javascript
代码运行次数:0
运行
复制

上面的代码很简单,我们在Widget初始化时建立了一个AnimationController对象用来控制动画的播放,并设置动画时长为2秒

然后我们建立一个Tween动画,从0.0开始到100.0结束,并且给动画设置监听,动画的值改变时都会触发print方法,把当前的值打印在控制台上。

控制台输出:

I/flutter ( 6616): 0.0 I/flutter ( 6616): 1.38355 I/flutter ( 6616): 2.2180999999999997 I/flutter ( 6616): 3.05225 I/flutter ( 6616): 3.88295 I/flutter ( 6616): 4.7136499999999995 I/flutter ( 6616): …… I/flutter ( 6616): 99.87325 I/flutter ( 6616): 100.0

好吧,我们还是把动画的值设置给floatcationbar再来看下效果。

代码语言:javascript
代码运行次数:0
运行
复制

实现起来也很简单只不过是把floatingActionButton的child变成了一个Text而已。

AnimatedWidget

在上面的例子中我们必须需要通过addListener来获得对动画值变化的监听,但是通过AnimatedWidget我们可以直接获得动画的值并赋值给相应的Widget

代码语言:javascript
代码运行次数:0
运行
复制

其实使用起来也非常的简单,只不过我们自定义了一个AnimationText继承于AnimatedWidget来获得对动画的监听并给Text赋值,当然程序的运行效果跟上面的例子是一样的。

控制View的大小

在上面的例子中我们通过动画的值来改变了Text显示的值,现在我们来试下改变View的大小。

其实实现起来很简单,只是把动画的值赋值给Widget的宽和高而已(官方例子)

代码语言:javascript
代码运行次数:0
运行
复制

动画状态监听

在前面的例子中我们使用ddListener来监听动画值的改变,这里我们使用aaddStatusListener来监听动画状态的变更。

代码语言:javascript
代码运行次数:0
运行
复制

我们监听动画的状态变更,当动画结束时我们反转动画,当动画的反转也结束后我们从新开始动画,这样动画就会一直这样循环下去。

CurvedAnimation

接下来我们来看下CurvedAnimation,通过CurvedAnimation我们可以实现动画的非线性播放,比如先快后慢

先慢后快

代码语言:javascript
代码运行次数:0
运行
复制

实现起来也很简单,我们只需要把CurvedAnimation传递给Tween即可,另外这个例子中我们使用AnimatedBuilder来构建动画Widget,其实跟前面的AnimatedWdiget是类似的。

Curves类中有很多内置的非线性动画效果,大家可以在下面自己试下,当然 大家也可以根据自己的需要定制属于自己的非线性动画效果

动画的并行运行

当然我们有时候需要多个动画同时作用的效果,比如大小的改变和透明度的改变

每一个Tween管理动画的一种效果。例如:

代码语言:javascript
代码运行次数:0
运行
复制
代码语言:javascript
代码运行次数:0
运行
复制

你可以通过sizeAnimation.value来获取大小,通过opacityAnimation.value来获取不透明度,但AnimatedWidget的构造函数只接受一个动画对象。 为了解决这个问题,该示例创建了自己的Tween对象并显式计算了这些值。

其build方法.evaluate()在父级的动画对象上调用Tween函数以计算所需的size和opacity值。

好吧,今天先写这么多吧,大家在下面要多多练习哈

我怀疑这个是个坏掉的二维码,分享到朋友圈试试?

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-05-13,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 flutter开发者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
【Flutter 专题】37 Animation 基本动画 (一)
和尚一直对动画不太熟悉,最近学习了一些关于动画的皮毛知识,网上资料很多,和尚按自己的理解整理一下。
阿策小和尚
2019/08/12
1K0
【Flutter 专题】37 Animation 基本动画 (一)
手把手教你用Flutter做炫酷动画
导读:随着技术的发展,很多网页开发技术都带有动画效果,比如淡入淡出、渐变、变大变小,等等。Flutter中的动画效果可以用酷炫来形容,这也是Flutter的一大特色。现代的应用程序不仅仅需要程序稳定、好用,还需要好看,体验好。那么动画效果是必不可少的。
IT阅读排行榜
2019/12/10
1.9K0
手把手教你用Flutter做炫酷动画
【Flutter】Animation 动画 ( Flutter 动画类型 | Flutter 动画的核心类 )
Flutter 动画参考文档 : https://flutterchina.club/animations/
韩曙亮
2023/03/29
9120
Flutter跨平台移动端开发丨Animation、AnimationController、Curve
目录 动画相关主要对象 缩放动画 非线性缩放动画 淡入淡出 非线性淡入淡出 平移动画 非线性平移动画 ---- 动画相关主要对象 Animation:可分为线性动画、非线性动画、步进函数动画或其它动画。通过 addListener 方法可以添加监听器,每当动画帧发生改变时均会调用,一般会配合 setState 方法用作UI重建。通过 addStatusListener 方法可添加状态改变监听器,如:动画开始、动画结束等 AnimationController:动画控制器,动画的开始、结束、停止、反向均由
码脑
2019/05/25
1.2K0
Flutter widget动画效果之CurvedAnimation
在Android中,我们可以用XML来指定动画样式,或者调用View的animate()方法。在Flutter中,widget的动画效果利用animated动画化组件的动画库来实现。
AnRFDev
2021/02/01
1.1K0
Flutter widget动画效果之CurvedAnimation
【Flutter实战】动画核心(1/2)
任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
老孟Flutter
2020/09/11
6100
【Flutter实战】动画核心(1/2)
《Flutter 动画系列一》25种动画组件超全总结
任何程序的动画原理都是一样的,即:视觉暂留,视觉暂留又叫视觉暂停,人眼在观察景物时,光信号传入大脑神经,需经过一段短暂的时间,光的作用结束后,视觉形象并不立即消失,这种残留的视觉称“后像”,视觉的这一现象则被称为“视觉暂留”。
老孟Flutter
2020/04/02
1.2K0
【Flutter实战】动画核心(2/2)
动画中还有一个重要的概念就是 Curve,即动画执行曲线。Curve 的作用和 Android 中的 Interpolator(差值器)是一样的,负责控制动画变化的速率,通俗地讲就是使动画的效果能够以匀速、加速、减速、抛物线等各种速率变化。
老孟Flutter
2020/09/11
6830
【Flutter实战】动画核心(2/2)
【Flutter 实战】一文学会20多个动画组件
Flutter 系统提供了20多个动画组件,只要你把前面【动画核心】(文末有链接)的文章看明白了,这些组件对你来说是非常轻松的,这些组件大部分都是对常用操作的封装。
老孟Flutter
2020/09/11
7350
【Flutter 实战】一文学会20多个动画组件
FlutterComponent最佳实践之动画那些词儿
什么是动画,从数学上来说,动画指的是一个属性的变换过程,实际上,就是一个函数,将一个属性值变成另一个属性值的过程。
用户1907613
2022/05/17
4520
FlutterComponent最佳实践之动画那些词儿
【Flutter 专题】38 Animation 基本动画 (二)
和尚前两天学习了以下 Animation 的基本动画,接下来和尚学习以下稍微进阶版的 Animation 动画。
阿策小和尚
2019/08/12
7050
【Flutter 专题】38 Animation 基本动画 (二)
Flutter 动画之 Animation
1.前言 1.1:Flutter动画中: 首先要看的是Flutter中动画的几个类之间的关系: 主角当然是我们的Animation类了,它可以借助Animatable进行强化 Animata
张风捷特烈
2020/04/30
2.1K0
Flutter 动画之 Animation
Flutter 小技巧之有趣的动画技巧
本篇分享一个简单轻松的内容: 剖析 Flutter 里的动画技巧 ,首先我们看下图效果,如果要实现下面的动画切换效果,你会想到如何实现?
GSYTech
2022/06/20
5410
带你轻松掌握Flutter 动画开发核心技能
在这篇文章中,将向大家分享Flutter动画开发的一些核心技能,以及一些技巧和经验。
CrazyCodeBoy
2019/12/10
7010
带你轻松掌握Flutter 动画开发核心技能
【Flutter】Animation 动画 ( Flutter 动画的核心类 | Animation | CurvedAnimation | AnimationController | Tween )
Animation : Flutter 动画最核心的类 , 用于生成动画的中间过渡值 ;
韩曙亮
2023/03/29
7470
Flutter | 通过一个小例子带你认识动画 Animation
首先,我们知道在我们的APP中充斥着各种各样的动画,有的是用 GIF,有的用的 Flare,有的是用的 Lottie...。
Flutter笔记
2019/08/29
1.4K0
Flutter | 通过一个小例子带你认识动画 Animation
flutter系列之:如何自定义动画路由
flutter中有默认的Route组件,叫做MaterialPageRoute,一般情况下我们在flutter中进行跳转的话,只需要向Navigator中传入一个MaterialPageRoute就可以了。
程序那些事
2023/04/19
7780
Flutter第2天--Animation动画+粒子运动
Flutter学习第二天----2018-12-17----天气晴朗 零前言: 昨天讲了一下Flutter的基础项目,介绍了一下Dart语言,简单的用Canvas绘个图 本来打算今天把内置控件看一
张风捷特烈
2018/12/27
2.5K0
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )
在上一篇博客 【Flutter】Animation 动画 ( AnimatedWidget 动画使用流程 | 创建动画控制器 | 创建动画 | 创建 AnimatedWidget 动画组件 | 动画运行 ) 中 , 使用了 AnimatedWidget 组件实现动画 , 省略了手动添加监听器 , 并在监听器中手动调用 setState 更新动画的操作 ;
韩曙亮
2023/03/29
1.9K0
【Flutter】Animation 动画 ( AnimatedBuilder 动画使用流程 | 创建动画控制器 | 创建动画 | 创建动画作用的组件 | 关联动画与组件 | 动画执行 )
Flutter 知识集锦 | 基于 Flow 实现滑动显隐层
最近要实现一个小需求,涵盖了很多知识点,比如手势、动画、布局等。挺有意思的,写出来和大家分享一下。如下所示,分为上下两层;当左右滑时,上层会随偏移量而平移,从而让上层产生滑动手势显隐的效果:
张风捷特烈
2023/03/16
7280
Flutter 知识集锦 | 基于 Flow 实现滑动显隐层
推荐阅读
相关推荐
【Flutter 专题】37 Animation 基本动画 (一)
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验