2009年9月16日 星期三

在WPF中加入動畫

WPF整合了DirectX的動態處理,內建了動畫的控制項
不過對於原本沒有在使用動畫或是flash的程式設計師
其實還是很難以想像要怎麼使用動畫的元件

基本上WPF提供的動畫依照動作的素材可以分成四類
表示在時間軸上所對應屬性的變化
素材說明
double套用在數值類型的屬性上
color套用在筆刷(顏色)屬性上
point套用在位置(座標)屬性上
string套用在字串屬性上

另外,也可以依照動畫的軌跡類型做分類
軌跡說明
僅有起點與終點將對應的屬性由起點變化到終點,字串類形(string)無此此軌跡
設定主畫面(KeyFrame)設定需要經過的主畫面,可選擇性設定每張主畫面應該出現的時間點,並可以選擇每個主畫面的切換效果
給定路徑(Path)給定屬性應該變化的路徑,僅適用於數值類型(double)以及位置類型(point)

如果希望設定一個按鈕的寬度由100到200

private void ApplyAnimation(Button b)
{
/// init a double animation
DoubleAnimation da = new DoubleAnimation();

/// set the from and to value of button width
da.From = 100;
da.To = 200;

/// set the duration of each animation
da.Duration = TimeSpan.FromSeconds(3);

/// apply the double animation to width of button
b.BeginAnimation(Button.WidthProperty, da);
}

這是最簡單的動畫了,只有設定起終點以及花費的時間
在DoubleAnimation中設定起終點的方式還有好幾種
指定欄位說明
From和To從From的數值,一直變化到To的數值
From和By從From的數值,一直變化到From+By的數值
From從From的數值,一直變化到原有的值(原本必須要有值)
To從原有的值(原本必須要有值),一直變化到To的數值
By從原有的值(原本必須要有值),一直變化到該值+By的數值

另外還有一些常用的設定可以參考下表
屬性說明
AccelerationRatio加速度,從0加速到最大的變化比率,0~1
DecelerationRatio減速度,從最大速度減速到0的變化比率,0~1, AccelerationRatio與DecelerationRatio總和亦需介於0~1之間
AutoReverse動畫結束時,再將起始點互換播放一次
RepeatBehavior重複設定,設為RepeatBehavior.Forever即會不斷重複播放(包含AutoReverse的設定)
FillBehavior動畫完成後的動作(若RepeatBehavior被設定,因為動畫沒有完成的時候,所以不會作用),若設成FillBehavior.Stop則會讓關聯的屬性回覆到原有的值(並非From的值),若不設定則預設為FillBehavior.HoldEnd,也就是保持終點的值

另外,這邊提供的是最簡易的加入動畫的方法
如果想要知道怎麼使用主畫面來設定動畫,可以參考
在WPF中加入主畫面(Key Frame)驅動的動畫
在XAML中還需要加入腳本(StoryBoard)才可以使用動畫
可以參考在WPF的XAML裡面使用動畫

--
參考資料
動畫概觀
HOW TO:不使用腳本而建立屬性的動畫
DoubleAnimation 類別
DoubleAnimation 成員

沒有留言:

張貼留言