Xamarin.Forms 包含一个 Easing 类,可用于指定一个传输函数来控制动画在运行时如何加速或减速。 本文演示如何使用预定义的缓动函数,以及如何创建自定义缓动函数。
Easing 类定义动画可以使用的缓动函数:
- BounceIn缓动函数在开头弹跳动画。
- BounceOut缓动函数在末尾弹跳动画。
- CubicIn缓动函数缓慢加速动画。
- CubicInOut缓动函数在开头加速动画,在末尾减速动画。
- CubicOut缓动函数可快速减速动画。
- Linear缓动函数使用常量速度,是默认缓动函数。
- SinIn缓动函数可平稳加速动画。
- SinInOut缓动函数在开头平稳加速动画,在末尾平稳减速动画。
- SinOut缓动函数平稳减速动画。
- SpringIn缓动函数使动画在接近尾声时快速加速。
- SpringOut缓动函数使动画在接近末尾时快速减速。
In 与 Out 后缀指示缓动函数提供的效果在动画的开头、末尾或两者之间是否明显。
此外,可以创建自定义缓动函数。 有关详细信息,请参阅自定义缓动函数。
使用缓动函数
如以下代码示例所示,ViewExtensions 类中的动画扩展方法支持将缓动函数指定为最终方法参数:
await image.TranslateTo(0, 200, 2000, Easing.BounceIn);
await image.ScaleTo(2, 2000, Easing.CubicIn);
await image.RotateTo(360, 2000, Easing.SinInOut);
await image.ScaleTo(1, 2000, Easing.CubicOut);
await image.TranslateTo(0, -200, 2000, Easing.BounceOut);
通过为动画指定缓动函数,动画速度变为非线性,并产生缓动函数提供的效果。 创建动画时忽略缓动函数会导致动画使用默认 Linear 缓动函数,从而产生线性速度。
注意
Xamarin.Forms 5.0 包含一个类型转换器,可将缓动函数的字符串表示转换为适当的 Easing 枚举成员。 在 XAML 中设置的任何 Easing 类型属性都会自动调用该类型转换器。
有关使用 ViewExtensions 类中动画扩展方法的更多信息,请参见简单动画 。 Animation 类也可以使用缓动函数。 有关详细信息,请参阅自定义动画。
自定义缓动函数
创建自定义缓动函数有三种主要方法:
- 创建采用 double参数并返回double结果的方法。
- 创建 Func<double, double>。
- 将缓动函数指定为 Easing构造函数的参数。
在这三种情况下,如果参数为 0,自定义缓动函数应返回 0;如果参数为 1,自定义缓动函数应返回 1。 不过,可以返回参数值 0 和 1 之间的任何值。 现在将依次讨论每个方法。
自定义缓动方法
自定义缓动函数可以定义为采用 double 参数并返回 double 结果的方法,如以下代码示例所示:
double CustomEase (double t)
{
  return t == 0 || t == 1 ? t : (int)(5 * t) / 5.0;
}
await image.TranslateTo(0, 200, 2000, (Easing)CustomEase);
CustomEase 方法会将传入值截断为 0、0.2、0.4、0.6、0.8 和 1。 因此,Image 实例在离散跳跃中转换,而不是平稳转换。
自定义缓动函数
还可以将自定义缓动函数定义为 Func<double, double>,如以下代码示例所示:
Func<double, double> CustomEaseFunc = t => 9 * t * t * t - 13.5 * t * t + 5.5 * t;
await image.TranslateTo(0, 200, 2000, CustomEaseFunc);
CustomEaseFunc 代表一个缓动函数,开始时速度很快,随后放慢并反向运动,然后再次反向运动,最后快速加速。 因此,虽然 Image 实例整体运动轨迹向下,但它也会在动画中途暂时反转。
自定义缓动构造函数
还可以将自定义缓动函数定义为 Easing 构造函数的参数,如以下代码示例所示:
await image.TranslateTo (0, 200, 2000, new Easing (t => 1 - Math.Cos (10 * Math.PI * t) * Math.Exp (-5 * t)));
自定义缓动函数被指定为 Easing 构造函数的 Lambda 函数参数,并使用 Math.Cos 方法创建受 Math.Exp 方法抑制的缓慢下降效果。 因此,Image 实例被转换成看似下降至其最终静止位置的效果。
总结
本文演示如何使用预定义的缓动函数,以及如何创建自定义缓动函数。 Xamarin.Forms 包含一个 Easing 类,可用于指定一个传输函数来控制动画在运行时如何加速或减速。
相关链接
- 异步支持概述
- “缓动”
- ViewExtensions