資源簡介
winform 自定義溫度計控件
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace AnimationLibrary
{
/// <summary>
/// 線性動畫函數(shù)(算法基本由Silverlight提取出來)
/// </summary>
[Description("線性動畫函數(shù)(算法基本由Silverlight提取出來)")]
public static class AnimationCore
{
#region UniformMotion
/// <summary>
/// 勻速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double UniformMotion(double origin, double transform, double usedTime, double allTime)
{
return origin transform * UniformMotionCore(usedTime, allTime);
}
/// <summary>
/// 勻速
/// </summary>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double UniformMotionCore(double usedTime, double allTime)
{
return usedTime / allTime;
}
#endregion
#region Ease
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseIn(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * EaseInCore(usedTime / allTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseInCore(double progressTime, double power)
{
power = Math.Max(0.0, power);
return Math.Pow(progressTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseOut(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * (EaseOutCore(usedTime / allTime, power));
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseOutCore(double progressTime, double power)
{
return 1.0 - EaseInCore(1.0 - progressTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseBoth(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * EaseBothCore(usedTime / allTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseBothCore(double progressTime, double power)
{
if (progressTime >= 0.5)
return (1.0 - EaseInCore((1.0 - progressTime) * 2.0, power)) * 0.5 0.5;
return EaseInCore(progressTime * 2.0, power) * 0.5;
}
#endregion
#region Back
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackIn(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackInCore((usedTime / allTime), power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackInCore(double progressTime, double power, double amplitude)
{
amplitude = Math.Max(0.0, amplitude);
return Math.Pow(progressTime, power) - progressTime * amplitude * Math.Sin(Math.PI * progressTime);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackOut(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackOutCore((usedTime / allTime), power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackOutCore(double progressTime, double power, double amplitude)
{
return 1.0 - BackInCore(1.0 - progressTime, power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackBoth(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackBothCore(usedTime / allTime, power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackBothCore(double progressTime, double power, double amplitude)
{
if (progressTime >= 0.5)
return (1.0 - BackInCore((1.0 - progressTime) * 2.0, power, amplitude)) * 0.5 0.5;
return BackInCore(progressTime * 2.0, power, amplitude) * 0.5;
}
#endregion
#region Bounce
/// <summary>
/// 彈球減振 加速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceIn(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceInCore((usedTime / allTime), bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceInCore(double progressTime, int bounces, double bounciness)
{
double y1 = Math.Max(0.0, (double)bounces);
double num1 = bounciness;
if (num1 < 1.0 || Math.Abs(num1 - 1.0) < 2.22044604925031E-15)
num1 = 1001.0 / 1000.0;
double num2 = Math.Pow(num1, y1);
double num3 = 1.0 - num1;
double num4 = (1.0 - num2) / num3 num2 * 0.5;
double y2 = Math.Floor(Math.Log(-(progressTime * num4) * (1.0 - num1) 1.0, num1));
double y3 = y2 1.0;
double num5 = (1.0 - Math.Pow(num1, y2)) / (num3 * num4);
double num6 = (1.0 - Math.Pow(num1, y3)) / (num3 * num4);
double num7 = (num5 num6) * 0.5;
double num8 = progressTime - num7;
double num9 = num7 - num5;
return -Math.Pow(1.0 / num1, y1 - y2) / (num9 * num9) * (num8 - num9) * (num8 num9);
}
/// <summary>
/// 加速 彈球減振
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceOut(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceOutCore((usedTime / allTime), bounces, bounciness);
}
/// <summary>
/// 加速 彈球減振
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceOutCore(double progressTime, int bounces, double bounciness)
{
return 1.0 - BounceInCore(1.0 - progressTime, bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速 彈球減振
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceBoth(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceBothCore(usedTime / allTime, bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速 彈球減振
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceBothCore(double progressTime, int bounces, double bounciness)
{
if (progressTime >= 0.5)
return (1.0 - BounceInCore((1.0 - progressTime) * 2.0, bounces, bounciness)) * 0.5 0.5;
return BounceInCore(progressTime * 2.0, bounces, bounciness) * 0.5;
}
#endregion
#region Elastic
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticIn(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticInCore((usedTime / allTime), oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticInCore(double progressTime, int oscillations, double springiness)
{
oscillations = Math.Max(0, oscillations);
springiness = Math.Max(0.0, springiness);
return (!(Math.Abs(springiness) < 2.22044604925031E-15) ? (Math.Exp(springiness * progressTime) - 1.0) / (Math.Exp(springiness) - 1.0) : progressTime) * Math.Sin((2.0 * Math.PI * oscillations Math.PI / 2.0) * progressTime);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticOut(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticOutCore((usedTime / allTime), oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticOutCore(double progressTime, int oscillations, double springiness)
{
return 1.0 - ElasticInCore(1.0 - progressTime, oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticBoth(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticBothCore(usedTime / allTime, oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticBothCore(double progressTime, int oscillations, double springiness)
{
if (progressTime >= 0.5)
return (1.0 - ElasticInCore((1.0 - progressTime) * 2.0, oscillations, springiness)) * 0.5 0.5;
return ElasticInCore(progressTime * 2.0, oscillations, springiness) * 0.5;
}
#endregion
#region Quadratic
/// <summary>
/// 二次
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double QuadraticIn(double origin, double transform, double usedTime, double allTime)
{
return origin transform * QuadraticInCore(usedTime / allTime);
}
/// <summary>
/// 二次
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <returns></returns>
public static double QuadraticInCore(double progressTime)
{
return -4 * Math.Pow((progressTime - 0.5), 2.0) 1.0;
}
/// <summary>
/// 二次
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double QuadraticOut(double origin, double transform, double usedTime, double allTime)
{
return origin transform * QuadraticOutCore(usedTime / allTime);
}
/// <summary>
/// 二次
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <returns></returns>
public static double QuadraticOutCore(double progressTime)
{
if (progressTime >= 0.5)
{
return 4 * Math.Pow((progressTime - 0.5 - 0.5), 2.0);
}
return 4 * Math.Pow((progressTime), 2.0);
}
#endregion
}
/// <summary>
/// 動畫類型
/// </summary>
[Description("動畫類型")]
public enum AnimationTypes
{
UniformMotion,
EaseIn,
EaseOut,
EaseBoth,
BackIn,
BackOut,
BackBoth,
BounceIn,
BounceOut,
BounceBoth,
ElasticIn,
ElasticOut,
ElasticBoth,
QuadraticIn,
QuadraticOut
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
namespace AnimationLibrary
{
/// <summary>
/// 線性動畫函數(shù)(算法基本由Silverlight提取出來)
/// </summary>
[Description("線性動畫函數(shù)(算法基本由Silverlight提取出來)")]
public static class AnimationCore
{
#region UniformMotion
/// <summary>
/// 勻速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double UniformMotion(double origin, double transform, double usedTime, double allTime)
{
return origin transform * UniformMotionCore(usedTime, allTime);
}
/// <summary>
/// 勻速
/// </summary>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double UniformMotionCore(double usedTime, double allTime)
{
return usedTime / allTime;
}
#endregion
#region Ease
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseIn(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * EaseInCore(usedTime / allTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseInCore(double progressTime, double power)
{
power = Math.Max(0.0, power);
return Math.Pow(progressTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseOut(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * (EaseOutCore(usedTime / allTime, power));
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseOutCore(double progressTime, double power)
{
return 1.0 - EaseInCore(1.0 - progressTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseBoth(double origin, double transform, double usedTime, double allTime, double power)
{
return origin transform * EaseBothCore(usedTime / allTime, power);
}
/// <summary>
/// 變速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值2)</param>
/// <returns></returns>
public static double EaseBothCore(double progressTime, double power)
{
if (progressTime >= 0.5)
return (1.0 - EaseInCore((1.0 - progressTime) * 2.0, power)) * 0.5 0.5;
return EaseInCore(progressTime * 2.0, power) * 0.5;
}
#endregion
#region Back
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackIn(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackInCore((usedTime / allTime), power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackInCore(double progressTime, double power, double amplitude)
{
amplitude = Math.Max(0.0, amplitude);
return Math.Pow(progressTime, power) - progressTime * amplitude * Math.Sin(Math.PI * progressTime);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackOut(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackOutCore((usedTime / allTime), power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackOutCore(double progressTime, double power, double amplitude)
{
return 1.0 - BackInCore(1.0 - progressTime, power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackBoth(double origin, double transform, double usedTime, double allTime, double power, double amplitude)
{
return origin transform * BackBothCore(usedTime / allTime, power, amplitude);
}
/// <summary>
/// 收縮
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="power">動畫曲線冪(默認(rèn)值3)</param>
/// <param name="amplitude">收縮與相關(guān)聯(lián)的幅度動畫。此值必須大于或等于 0。 默認(rèn)值為 1。</param>
/// <returns></returns>
public static double BackBothCore(double progressTime, double power, double amplitude)
{
if (progressTime >= 0.5)
return (1.0 - BackInCore((1.0 - progressTime) * 2.0, power, amplitude)) * 0.5 0.5;
return BackInCore(progressTime * 2.0, power, amplitude) * 0.5;
}
#endregion
#region Bounce
/// <summary>
/// 彈球減振 加速
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceIn(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceInCore((usedTime / allTime), bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceInCore(double progressTime, int bounces, double bounciness)
{
double y1 = Math.Max(0.0, (double)bounces);
double num1 = bounciness;
if (num1 < 1.0 || Math.Abs(num1 - 1.0) < 2.22044604925031E-15)
num1 = 1001.0 / 1000.0;
double num2 = Math.Pow(num1, y1);
double num3 = 1.0 - num1;
double num4 = (1.0 - num2) / num3 num2 * 0.5;
double y2 = Math.Floor(Math.Log(-(progressTime * num4) * (1.0 - num1) 1.0, num1));
double y3 = y2 1.0;
double num5 = (1.0 - Math.Pow(num1, y2)) / (num3 * num4);
double num6 = (1.0 - Math.Pow(num1, y3)) / (num3 * num4);
double num7 = (num5 num6) * 0.5;
double num8 = progressTime - num7;
double num9 = num7 - num5;
return -Math.Pow(1.0 / num1, y1 - y2) / (num9 * num9) * (num8 - num9) * (num8 num9);
}
/// <summary>
/// 加速 彈球減振
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceOut(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceOutCore((usedTime / allTime), bounces, bounciness);
}
/// <summary>
/// 加速 彈球減振
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceOutCore(double progressTime, int bounces, double bounciness)
{
return 1.0 - BounceInCore(1.0 - progressTime, bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速 彈球減振
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceBoth(double origin, double transform, double usedTime, double allTime, int bounces, double bounciness)
{
return origin transform * BounceBothCore(usedTime / allTime, bounces, bounciness);
}
/// <summary>
/// 彈球減振 加速 彈球減振
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="bounces">反彈次數(shù)。值必須大于或等于零(默認(rèn)值為3)</param>
/// <param name="bounciness">指定反彈動畫的彈性大小。雖然較高的值都會導(dǎo)致反彈 (彈性較小),此屬性中的結(jié)果很少或者反彈低值會丟失反彈 (彈性較大) 之間的高度。此值必須是正數(shù)(默認(rèn)值為 2)</param>
/// <returns></returns>
public static double BounceBothCore(double progressTime, int bounces, double bounciness)
{
if (progressTime >= 0.5)
return (1.0 - BounceInCore((1.0 - progressTime) * 2.0, bounces, bounciness)) * 0.5 0.5;
return BounceInCore(progressTime * 2.0, bounces, bounciness) * 0.5;
}
#endregion
#region Elastic
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticIn(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticInCore((usedTime / allTime), oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticInCore(double progressTime, int oscillations, double springiness)
{
oscillations = Math.Max(0, oscillations);
springiness = Math.Max(0.0, springiness);
return (!(Math.Abs(springiness) < 2.22044604925031E-15) ? (Math.Exp(springiness * progressTime) - 1.0) / (Math.Exp(springiness) - 1.0) : progressTime) * Math.Sin((2.0 * Math.PI * oscillations Math.PI / 2.0) * progressTime);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticOut(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticOutCore((usedTime / allTime), oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticOutCore(double progressTime, int oscillations, double springiness)
{
return 1.0 - ElasticInCore(1.0 - progressTime, oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticBoth(double origin, double transform, double usedTime, double allTime, int oscillations, double springiness)
{
return origin transform * ElasticBothCore(usedTime / allTime, oscillations, springiness);
}
/// <summary>
/// Elastic
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <param name="oscillations">目標(biāo)來回滑過動畫目標(biāo)的次數(shù)。此值必須大于或等于0 (默認(rèn)值為3)</param>
/// <param name="springiness">彈簧鍘度。 越小的 Springiness 值為,嚴(yán)格 spring,通過每個振動的強(qiáng)度減小的速度越快彈性。一個正數(shù)(默認(rèn)值為3)</param>
/// <returns></returns>
public static double ElasticBothCore(double progressTime, int oscillations, double springiness)
{
if (progressTime >= 0.5)
return (1.0 - ElasticInCore((1.0 - progressTime) * 2.0, oscillations, springiness)) * 0.5 0.5;
return ElasticInCore(progressTime * 2.0, oscillations, springiness) * 0.5;
}
#endregion
#region Quadratic
/// <summary>
/// 二次
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double QuadraticIn(double origin, double transform, double usedTime, double allTime)
{
return origin transform * QuadraticInCore(usedTime / allTime);
}
/// <summary>
/// 二次
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <returns></returns>
public static double QuadraticInCore(double progressTime)
{
return -4 * Math.Pow((progressTime - 0.5), 2.0) 1.0;
}
/// <summary>
/// 二次
/// </summary>
/// <param name="origin">要變換的起始值</param>
/// <param name="transform">要變換的總值</param>
/// <param name="usedTime">已進(jìn)行動畫時間</param>
/// <param name="allTime">總動畫時間</param>
/// <returns></returns>
public static double QuadraticOut(double origin, double transform, double usedTime, double allTime)
{
return origin transform * QuadraticOutCore(usedTime / allTime);
}
/// <summary>
/// 二次
/// </summary>
/// <param name="progressTime">已進(jìn)行動畫時間/總動畫時間</param>
/// <returns></returns>
public static double QuadraticOutCore(double progressTime)
{
if (progressTime >= 0.5)
{
return 4 * Math.Pow((progressTime - 0.5 - 0.5), 2.0);
}
return 4 * Math.Pow((progressTime), 2.0);
}
#endregion
}
/// <summary>
/// 動畫類型
/// </summary>
[Description("動畫類型")]
public enum AnimationTypes
{
UniformMotion,
EaseIn,
EaseOut,
EaseBoth,
BackIn,
BackOut,
BackBoth,
BounceIn,
BounceOut,
BounceBoth,
ElasticIn,
ElasticOut,
ElasticBoth,
QuadraticIn,
QuadraticOut
}
}
代碼片段和文件信息
using?System;
using?System.Collections.Generic;
using?System.Linq;
using?System.Text;
using?System.ComponentModel;
namespace?AnimationLibrary
{
??///?
??///?線性動畫函數(shù)(算法基本由Silverlight提取出來)
??///?
??[Description(“線性動畫函數(shù)(算法基本由Silverlight提取出來)“)]
??public?static?class?AnimationCore
??{
????#region?UniformMotion
????///?
????///??勻速
????///?
????///?要變換的起始值
????///?要變換的總值
????///?已進(jìn)行動畫時間
????///?總動畫時間
????///?
????public?static?double?UniformMotion(double?origin?double?transform?double?usedTime?double?allTime)
????{
??????return?origin?+?transform?*?UniformMotionCore(usedTime?allTime);
????}
????///?
????///?勻速
????///?
????///?已進(jìn)行動畫時間
????///?總動畫時間
????///?
????public?static?doub
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2020-06-22?13:30??溫度計控件\
?????目錄???????????0??2020-06-22?13:30??溫度計控件\AnimationLibrary\
?????文件???????21704??2020-06-19?21:10??溫度計控件\AnimationLibrary\AnimationCore.cs
?????文件????????2652??2020-06-22?11:49??溫度計控件\AnimationLibrary\AnimationLibrary.csproj
?????文件???????21699??2020-06-19?21:10??溫度計控件\AnimationLibrary\AnimationTimer.cs
?????目錄???????????0??2020-06-22?13:30??溫度計控件\AnimationLibrary\bin\
?????目錄???????????0??2020-06-22?13:31??溫度計控件\AnimationLibrary\bin\Debug\
?????文件???????19968??2020-06-22?13:31??溫度計控件\AnimationLibrary\bin\Debug\AnimationLibrary.dll
?????文件???????44544??2020-06-22?13:31??溫度計控件\AnimationLibrary\bin\Debug\AnimationLibrary.pdb
?????目錄???????????0??2020-06-22?13:30??溫度計控件\AnimationLibrary\Design\
?????文件????????1005??2020-06-19?21:10??溫度計控件\AnimationLibrary\Design\EmptyExpandableob
?????目錄???????????0??2020-06-22?13:30??溫度計控件\AnimationLibrary\obj\
?????目錄???????????0??2020-06-22?13:31??溫度計控件\AnimationLibrary\obj\Debug\
?????文件?????????452??2020-06-22?13:31??溫度計控件\AnimationLibrary\obj\Debug\AnimationLibrary.csproj.FileListAbsolute.txt
?????文件???????19968??2020-06-22?13:31??溫度計控件\AnimationLibrary\obj\Debug\AnimationLibrary.dll
?????文件???????44544??2020-06-22?13:31??溫度計控件\AnimationLibrary\obj\Debug\AnimationLibrary.pdb
?????文件????????5880??2020-06-22?13:31??溫度計控件\AnimationLibrary\obj\Debug\DesignTimeResolveAssemblyReferencesInput.cache
?????目錄???????????0??2020-06-22?12:43??溫度計控件\AnimationLibrary\obj\Debug\TempPE\
?????目錄???????????0??2020-06-22?13:30??溫度計控件\AnimationLibrary\Properties\
?????文件????????1410??2020-06-22?01:55??溫度計控件\AnimationLibrary\Properties\AssemblyInfo.cs
?????目錄???????????0??2020-06-22?13:30??溫度計控件\ControlLibraryExt\
?????目錄???????????0??2020-06-22?13:30??溫度計控件\ControlLibraryExt\bin\
?????目錄???????????0??2020-06-22?13:31??溫度計控件\ControlLibraryExt\bin\Debug\
?????文件???????19968??2020-06-22?13:31??溫度計控件\ControlLibraryExt\bin\Debug\AnimationLibrary.dll
?????文件???????44544??2020-06-22?13:31??溫度計控件\ControlLibraryExt\bin\Debug\AnimationLibrary.pdb
?????文件???????28672??2020-06-27?23:16??溫度計控件\ControlLibraryExt\bin\Debug\ControlLibraryExt.dll
?????文件???????46592??2020-06-27?23:16??溫度計控件\ControlLibraryExt\bin\Debug\ControlLibraryExt.pdb
?????目錄???????????0??2020-06-22?12:43??溫度計控件\ControlLibraryExt\bin\Release\
?????文件????????3768??2020-06-22?13:31??溫度計控件\ControlLibraryExt\ControlLibraryExt.csproj
?????目錄???????????0??2020-06-22?13:31??溫度計控件\ControlLibraryExt\Design\
?????文件????????1244??2020-06-22?13:31??溫度計控件\ControlLibraryExt\Design\ImaginaryLineBorderExtDesigner.cs
............此處省略61個文件信息
- 上一篇:C# 一元線性回歸
- 下一篇:Linq to SQL 入門級教程
評論
共有 條評論
相關(guān)資源
- winform 鼠標(biāo)聚焦 焦點(diǎn)時變色
- winform仿qq停靠屏幕邊緣
- winform手動改變自定義窗口大小
- winform鼠標(biāo)穿透(新)
- C#winform打印指定區(qū)域 -控件拖動 -設(shè)置
- winform 垂直交錯效果顯示圖像
- winform 浮雕效果的圖像
- WPF 自定義標(biāo)題的winform窗體實(shí)現(xiàn)源碼
- 仿蘋果Safari 自定義控件(tab切換控件
- C# WinForm取命令行參數(shù)
- Winform中鼠標(biāo)穿透效果,類似桌面壁紙
- winform 利用image實(shí)現(xiàn)變臉小動畫
- winform中set文件的寫入
- winform操作webform后臺
- winform程序默認(rèn)以管理員身份運(yùn)行 (
- 自定義Winform窗體例子(入門級)122
- js調(diào)用winform類中的方法
- winform收銀機(jī)客顯器LED測試軟件demo
- winform 窗體換膚技巧
- winform富文本編輯器(kwig)
- C# 小軟件:WINFORM 瀏覽器
- WinForm實(shí)現(xiàn)文件的壓縮和解壓,并思考
- winform右下角最小化
- WinForm聯(lián)合halcon加載一張圖片
- winform調(diào)用webservice
- WinForm實(shí)現(xiàn)win7 Aero磨砂效果
- c# winform FTP連接服務(wù)器對文件進(jìn)行操作
- WinformHTMLEditor winform 富文本編輯器
- 1252056375_ddvip_2352 C#下基于WCF的聊天程
- 50847002C C# WinForm實(shí)踐開發(fā)教程