Curve
Curve:在Flutter中指动画执行曲线,并不是指动画变化轨迹,而是指负责控制动画变化的速率。
动画变化速率指:动画变化过程中均匀变化,加速(先慢后快),减速(先快后慢)等的动画动作。
在曲线变化时的类有:CurvedAnimation或者CurveTween。
 Curves 类是一个预置的枚举类,定义了许多常用的曲线:
- linear(匀速的)
Curves.linear
- decelerate(匀减速)
Curves.decelerate
- ease(开始加速,后面减速)
Curves.ease
- easeIn(开始慢,后面快)
Curves.easeIn
- easeOut(开始快,后面慢)
Curves.easeOut
- easeInOut(开始慢,然后加速,最后再减速)
Curves.easeInOut
- easeInSine
Curves.easeInSine
- easeInQuad
Curves.easeInQuad
- easeInCubic
Curves.easeInCubic
- easeInQuart
Curves.easeInQuart
- easeInQuint
Curves.easeInQuint
- bounceIn(弹跳)
Curves.bounceIn
- bounceInOut
Curves.bounceIn
- bounceOut
Curves.bounceOut
- easeInSine
Curves.easeInSine
自定义Curves
从源码中可以看到 Curve里有可以实现两个方法,官方建议实现transformInternal方法,因为transform方法内部直接返回了transformInternal这个方法。
...
 T transform(double t) {
    assert(t != null);
    assert(t >= 0.0 && t <= 1.0, 'parametric value $t is outside of [0, 1] range.');
    return transformInternal(t);
  }
 ...
所以定义一个类,继承Curve,实现transformInternal方法即可。
class MyCurve extends Curve {
  final double count;
  CustomCurve({this.count = 1});
  @override
  double transformInternal(double t) {
    return sin(count * 2 * t) * 0.5 + 0.5;
  }
}
或者:
class CustomCurve extends Curve {
  final double count;
  CustomCurve({this.count = 1});
  @override
  double transform(double t) {
    return sin(count * 2 * t) * 0.5 + 0.5;
  }
}