天天看點

WPF與緩動(三) 指數緩動

原文:

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(2, 10 * (t - 1)) + from;

WPF與緩動(三) 指數緩動

            }

WPF與緩動(三) 指數緩動

            return delta / 2 * (-Math.Pow(2, -10 * --t) + 2) + from;

WPF與緩動(三) 指數緩動
WPF與緩動(三) 指數緩動

        }

點選這裡下載下傳

源代碼