1. 程式人生 > >WPF動畫基礎學習總結

WPF動畫基礎學習總結

動畫基礎

建立正確動畫的祕訣在於決定需要修改什麼屬性。

WPF動畫第一條規則,每個動畫依賴於一個依賴項屬性,另一個需要支援相應資料型別的動畫類。

Animation

實際上有兩種動畫:在開始值和結束值之間一逐步增加的方式改變屬性的動畫,以及從一個值突然程式設計另一個值。關鍵幀動畫。

命名規則

平滑差值改變屬性動畫  型別名+Animation例如ColorAnimationDoubleAnimation

關鍵幀動畫  型別名+AnimationUsingKeyFrames 例如StringAnimationUsingKeyFrames

ObjectAnimationUsingKeyFrames

基於路勁的動畫  型別名+AnimationUsingPath 例如DoubleAnimationUsingPathPointAnimationUsingPath

DoubleAnimation widthAnimation = new DoubleAnimation();

            widthAnimation.From = 106;

            widthAnimation.To = this.Width - 30;

            widthAnimation.Duration = TimeSpan.FromSeconds(5);

            cmdGrow.BeginAnimation(Button.WidthProperty, widthAnimation);

差值動畫需要三個細節:開始值(From),結束值(To),動畫執行時間(Duration

From屬性如果設定,每次點選的時候都會重新設定為設定的值,並重新開始動畫。

許多情況下可能不需要動畫從最初的From值開始。

l 建立能夠被觸發多次,並逐次累加的動畫。

l 建立可能相互重疊的動畫。例如,可使用mouseEnter事件觸發擴充套件按鈕的動畫,並使用MouseLeave事件觸發將按鈕縮小為原尺寸的互補動畫。(魚眼效果),如果連續快速的將滑鼠多次移動到這種按鈕上,並移開,每個新動畫就會打斷上一個動畫。

上述例項中就屬於第二種,會出現抖動現象,解決這個問題就是不設定From屬性,並硬編碼按鈕的寬度。當省略

From屬性時,動畫開始的屬性值是當前的值。

To屬性,就像From屬性一樣,也可是省略,當省略To屬性時,把最有一次設定的值當作To的屬性值。

By屬性,即使不使用To屬性,也可以使用By屬性。By屬性用於建立按設定數量改變值得動畫。

大部分使用插值的動畫類通常都提供了By屬性,但並非全部如此,例如對於非數值型別來說,By屬性是沒有意義的。另一種方法能達到類似的行為,不需要設定By屬性,通過設定IsAdditive。當設定IsAdditive時,From屬性就是跳到比當前大多少的值,然後增加,只到最後的值,最後的值是動畫開始前的當前值大To設定的值

widthAnimation.From = 0;

            widthAnimation.To = -10;

            widthAnimation.Duration = TimeSpan.FromSeconds(5);

            widthAnimation.IsAdditive = true;

            btn.BeginAnimation(Button.WidthProperty, widthAnimation);

同時發生的動畫:

DoubleAnimation widthAnimation = new DoubleAnimation();

            widthAnimation.From = 50;

            widthAnimation.To = 100;

            widthAnimation.Duration = TimeSpan.FromSeconds(5);

            DoubleAnimation heightAnimation = new DoubleAnimation();

            heightAnimation.From = 30;

            heightAnimation.To = 60;

            heightAnimation.Duration = TimeSpan.FromSeconds(2);

            btn.BeginAnimation(Button.WidthProperty, widthAnimation);

            btn.BeginAnimation(Button.HeightProperty, heightAnimation);

在這個例項中寬度和高度不會準確的在時間間隔增長。可通過建立繫結到同一個時間線的動畫,突破這一設定。

TimeLine類,繼承自TimeLine抽象類的三個主要分支,當播放音訊或視訊檔案時使用MediaTimeLine類,AnimationTimeLine分支用於到目前為止分析過的基於屬性的動畫系統。

TimeLineGroup分支則允許同步時間線並控制他們播放。

TimeLine類的幾個重要屬性。

BeginTime:設定將被新增到動畫之前的延遲時間

Duration:設定動畫開始到結束的事件

SpeedRatio:提高或減慢動畫的速度。

AccelerationRatio/DecelerationRatio:使動畫不是線性,從開始時較慢,然後增速AccelerationRatio的值,結束時減速DecelerationRatio的屬性值。

AutoReverse:動畫自動反向播放

FillBehavior:決定動畫結束時如何操作。

RepeatBehavior:通過該屬性,可以使用指定的次數或時間間隔重複動畫。