// COPYRIGHT (C) Tom. ALL RIGHTS RESERVED.
// THE AntdUI PROJECT IS AN WINFORM LIBRARY LICENSED UNDER THE Apache-2.0 License.
// LICENSED UNDER THE Apache License, VERSION 2.0 (THE "License")
// YOU MAY NOT USE THIS FILE EXCEPT IN COMPLIANCE WITH THE License.
// YOU MAY OBTAIN A COPY OF THE LICENSE AT
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING, SOFTWARE
// DISTRIBUTED UNDER THE LICENSE IS DISTRIBUTED ON AN "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
// SEE THE LICENSE FOR THE SPECIFIC LANGUAGE GOVERNING PERMISSIONS AND
// LIMITATIONS UNDER THE License.
// GITEE: https://gitee.com/antdui/AntdUI
// GITHUB: https://github.com/AntdUI/AntdUI
// CSDN: https://blog.csdn.net/v_132
// QQ: 17379620
using System;
namespace AntdUI
{
///
/// 动画
///
public static class Animation
{
///
/// 返回总帧数
///
/// 动画间隔
/// 动画时长(ms)
/// 动画总帧数
public static int TotalFrames(int interval, int lastTime)
{
return lastTime % interval > 0 ? lastTime / interval + 1 : lastTime / interval;
}
///
/// 执行动画
///
/// 当前帧
/// 总帧
/// 最大值
/// 动画类型
/// 当前数值
public static float Animate(double currentFrames, double totalFrames, float maxValue, AnimationType type)
{
return Animate(currentFrames / totalFrames, maxValue, type);
}
///
/// 执行动画
///
/// 帧进度
/// 最大值
/// 动画类型
/// 当前数值
public static float Animate(double progress, float maxValue, AnimationType type)
{
return (float)(maxValue * type.CalculateValue(progress));
}
public static double Animate(double progress, double maxValue, AnimationType type)
{
return maxValue * type.CalculateValue(progress);
}
internal static double CalculateValue(this AnimationType type, double v)
{
switch (type)
{
case AnimationType.Liner:
return v;
case AnimationType.Ease:
return Math.Sqrt(v);
case AnimationType.Ball:
return Math.Sqrt(1.0 - Math.Pow(v - 1, 2));
case AnimationType.Resilience:
return -10.0 / 6.0 * v * (v - 1.6);
default: return 1;
}
}
}
///
/// 动画类型
///
public enum AnimationType
{
///
/// 以同一速度移动
///
Liner,
///
/// 逐渐减速
///
Ease,
///
/// 加速并减速
///
Ball,
///
/// 弹性一样的动画
///
Resilience
}
}