• Flutter动画基础


    Flutter动画基础

    在Flutter中,提供了4个动画对象:

    编号 名称 说明
    1 Animation 是Flutter动画的核心抽象类,包含了动画的当前值和状态两个属性。
    2 AnumationController 是Animation的控制器,动画的开始、结束、停止、反向均由它控制,并且可以通过Listener组件和StatusListener组件来管理动画状态。
    3 Tween 是一个动画插值器,可以用它配置动画从开始到结束的变化规律。
    4 Curve 是一个动画曲线,用来控制动画随时间的变化,默认为匀速的线性动画。

    Animation

    这是一个Flutter动画中的核心抽象类,本身与视图渲染没有任何的区别。Animation依赖于Curve,Animation的对象是一个可以在一段时间内依次生成一个区间值的类,其输出值可以是线性的、非线性的,也可以是一个步进函数或者任何其他曲线函数等。

    Animation的对象状态值有4种:

    • dismissed,动画处于开始状态
    • forward,动画正在正向执行
    • reverse,动画正在反向执行
    • completed,动画处于结束状态

    Anumation的对象有两个监听器:

    • Listeners,对应的是addListener(),这是用于添加帧监听器,当真监听器监听到状态发生改变时,会通过调用setState()来触发视图重建。
    • StatusListeners,对应的是addStatusListener(),用于状态改变时从而进行发生响应。

    AnimationController

    是动画控制器,用于控制动画的开始、结束、正向、反向等操作。也是一个特殊的Animation对象。使用AnimationController创建的Animation对象,默认情况下不能够运行,需要调用forward()方法后,才能运行。在AnimationController中,提供了一些常见的函数,如下:

    • forward(),开始播放动画
    • stop(),停止动画播放
    • reset(),重置动画为初始态
    • reverse(),反向播放动画,需要正向播放动画后,才能够进行反向播放动画
    • repeat(),循环播放动画
    • dispose(),销毁动画,释放动画资源

    在创建AnimationController的时候,需要传递一个vsync参数,这个参数接收一个TickerProvider对象,该对象是一个抽象类,其是依赖于SchedulerBinding。SchedulerBinding又是Flutter在启动时会自动创建的,通过SchedulerBinding可以给每一次屏幕刷新添加回调。而Ticker对象是通过SchedulerBinding进行回调的,因此在每一次的屏幕刷新时,都会调用TickerCallback。

    Curve

    Curve主要用于控制动画随时间的变化率,默认为均匀的变化率,也就是线性动画。在Flutter开发中,可以通过CurvedAnimation来指定动画的曲线。Curves类是一个预置的枚举类,定义了许多常用的动画曲线。如下:

    编号 动画曲线 说明
    1 linear 匀速曲线
    2 decelerate 匀减速动画
    3 ease 先加速后减速动画
    easeIn 先快后慢动画
    easeOut 先慢后快动画
    6 easeInOut 先慢,然后加速,最后减速动画

    Curve的作用就是控制动画随时间的变化率,使用前首先需要创建Animator对象,实际使用中,会使用AnimatorController对象创建Animator对象。在Flutter中,还可以自己创建动画曲线,继承Curve对象,然后重写transform方法。

    class SineCurve extends Curve{
    	@override
    	double transform(double t){
    		return math.sin(t*math.PI*2);
    	}
    }
    

    Tween

    该类的职责是定义从输入范围到输出范围的一个映射,因此Tween对象的构造函数需要传入begin和end两个参数。Tween是一个无状态对象,继承与Animatable< T >。Animatable是一个控制动画类型的类,定义了动画的映射规则。

    这是小睿的博客,如果需要转载,请标注出处啦~ヾ(≧▽≦*)o谢谢。
  • 相关阅读:
    jQuery链式编程时修复断开的链
    只是一个用EF写的一个简单的分页方法而已
    asp.net Core 获取应用程序所在目录的2种方式
    FineUI使用记录
    C#判断一个string是否为数字
    MVC中利用ViewBag传递Json数据时的前端处理方法
    基于Ajax的文件上传使用FileInput插件(使用谷歌翻译作者的原文,大致意思是对的,自己把握)
    ansible中tag的用法
    rabbitMQ中vhost虚拟主机的理解
    一些比较好的链接
  • 原文地址:https://www.cnblogs.com/Yunrui-blogs/p/15507357.html
Copyright © 2020-2023  润新知