Flutter开发之——动画-物理动画

一 概述

  • Tween动画:给出动画的起始值和结束值,Flutter计算出动画过程
  • 物理动画:不确定结束值,根据起始条件(如初速度,摩檫力,初始位置进行动画模拟)
  • 物理动画是由Simulation类提供物理引擎模拟,Simulation是个抽象类,定义了必须属性和方法

二 Simulation

2.1 Simulation

abstract class Simulation {
   double x(double time);
   double dx(double time);
   bool isDone(double time);
  }

说明:

  • x:当前时间计算出的位置
  • dx:当前时间计算出的速度
  • isDone:当前时间动画是否已经完成

2.2 常用Simulation类

类名说明
BouncingScrollSimulation边界滚动物理引擎
BoundedFrictionSimulation边界摩擦模拟引擎
ClampedSimulation区间模拟引擎
ClampingScrollSimulation区间滚动模拟引擎
FrictionSimulation摩擦模拟引擎
GravitySimulation下落模拟引擎
ScrollSpringSimulation弹簧滚动模拟
SpringSimulation弹簧模拟

三 示例(ClampingScrollSimulation)

3.1 代码

 class _MyHomePageState extends State<MyHomePage> with TickerProviderStateMixin //TickerProviderStateMixin

 double value=0;
 var clampSimulation=ClampingScrollSimulation(position: 200, velocity: 1);
 Ticker tic;

  @override
  void initState() {
    super.initState();
    tic=createTicker((elapsed) {
      if (!clampSimulation.isDone(elapsed.inMicroseconds/1000)) {
        setState(() {
          value=clampSimulation.x(elapsed.inMicroseconds/1000);
        });
      }
    });
  }
 //动画设置
 Center(
        child: GestureDetector(
            onTap: () {if (!tic.isActive) {tic.start();}},
            child: Container(
              height: 100,
              width: 100,
              color: Colors.red,
              margin: EdgeInsets.only(left: value),
              alignment: Alignment.center,
              child: Text('点我开始动画',),
            ),
          ),
        )

3.2 效果图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值