WPF動畫基礎學習總結
動畫基礎
建立正確動畫的祕訣在於決定需要修改什麼屬性。
WPF動畫第一條規則,每個動畫依賴於一個依賴項屬性,另一個需要支援相應資料型別的動畫類。
Animation
實際上有兩種動畫:在開始值和結束值之間一逐步增加的方式改變屬性的動畫,以及從一個值突然程式設計另一個值。關鍵幀動畫。
命名規則
平滑差值改變屬性動畫 型別名+Animation例如ColorAnimation,DoubleAnimation
關鍵幀動畫 型別名+AnimationUsingKeyFrames 例如StringAnimationUsingKeyFrames
ObjectAnimationUsingKeyFrames
基於路勁的動畫 型別名+AnimationUsingPath 例如DoubleAnimationUsingPath和PointAnimationUsingPath
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屬性,並硬編碼按鈕的寬度。當省略
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:通過該屬性,可以使用指定的次數或時間間隔重複動畫。