且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

WPF与缓动(三) 指数缓动

更新时间:2022-09-13 18:43:43

原文:WPF与缓动(三) 指数缓动

                                                         WPF与缓动(三) 指数缓动
                                                                             周银辉

指数缓动给人的感觉是加速度很大.
它的原始公式来自:P(t) = Math.Pow(2,   10*(t-1));
与其他缓动一样,我在这里就直接给出其核心代码了:

WPF与缓动(三) 指数缓动 //指数缓动
WPF与缓动(三) 指数缓动
        protected override double GetCurrentValueCore(double defaultOriginValue, double defaultDestinationValue, AnimationClock animationClock)
WPF与缓动(三) 指数缓动WPF与缓动(三) 指数缓动        
WPF与缓动(三) 指数缓动{
WPF与缓动(三) 指数缓动            
double from = (this.From==null?defaultDestinationValue:(double)this.From);
WPF与缓动(三) 指数缓动            
double to = (this.To==null?defaultOriginValue:(double)this.To);
WPF与缓动(三) 指数缓动            
double delta = to - from;
WPF与缓动(三) 指数缓动            
double value = animationClock.CurrentProgress.Value;
WPF与缓动(三) 指数缓动
WPF与缓动(三) 指数缓动
WPF与缓动(三) 指数缓动            
//加速
WPF与缓动(三) 指数缓动            
//return delta * Math.Pow(2, 10 * (value - 1)) + from;
WPF与缓动(三) 指数缓动
WPF与缓动(三) 指数缓动            
//减速
WPF与缓动(三) 指数缓动            
//return delta * (-Math.Pow(2, -10 * value) + 1) + from;
WPF与缓动(三) 指数缓动
WPF与缓动(三) 指数缓动            
//先加速,后减速
WPF与缓动(三) 指数缓动
            double t = value * this.Duration.TimeSpan.Ticks;
WPF与缓动(三) 指数缓动            
double d = this.Duration.TimeSpan.Ticks;
WPF与缓动(三) 指数缓动            
if ((t/=(d/2)) < 1)
WPF与缓动(三) 指数缓动WPF与缓动(三) 指数缓动            
WPF与缓动(三) 指数缓动{
WPF与缓动(三) 指数缓动               
return  delta / 2 * Math.Pow(210 * (t - 1)) + from;
WPF与缓动(三) 指数缓动            }

WPF与缓动(三) 指数缓动            
return delta / 2 * (-Math.Pow(2-10 * --t) + 2+ from;
WPF与缓动(三) 指数缓动            
WPF与缓动(三) 指数缓动        }

点击这里下载源代码