一、動(dòng)畫概述
①動(dòng)畫是WPF模型的核心部分。這意味著為了讓動(dòng)畫動(dòng)起來,不需要使用計(jì)時(shí)器以及事件處理代碼,只需要使用聲明的方式即可創(chuàng)建動(dòng)畫。
②WPF動(dòng)畫是基于屬性的動(dòng)畫。本質(zhì)上,WPF動(dòng)畫只不過是在一段時(shí)間間隔內(nèi)修改下依賴項(xiàng)屬性而已。
③創(chuàng)建正確動(dòng)畫的秘密在于決定需要修改什么屬性。
④為了實(shí)現(xiàn)屬性的動(dòng)態(tài)化,需要有支持相應(yīng)數(shù)據(jù)類型的動(dòng)畫類。如Button.Width屬性使用雙精度數(shù)據(jù)類型,就必須使用DoubleAnimation類實(shí)現(xiàn)動(dòng)畫。
⑤動(dòng)畫分為:線性插值動(dòng)畫、關(guān)鍵幀動(dòng)畫和路徑動(dòng)畫
線性插值動(dòng)畫:指在開始值和結(jié)束值之間以逐步增加的方式進(jìn)行的動(dòng)畫。
命名方式:類型名+Animation。如:DoubleAnimation
關(guān)鍵幀動(dòng)畫:指一個(gè)值突然改變到另一個(gè)值的動(dòng)畫。
命名方式:類型名+AnimationUsingKeyFrames。如:ColorAnimationUsingKeyFrames
從適用范圍上將關(guān)鍵幀動(dòng)畫大于線性插值動(dòng)畫。可以這樣講所有支持關(guān)鍵幀動(dòng)畫的數(shù)據(jù)類型,都支持線性插值動(dòng)畫,但反過來不成立。
路徑動(dòng)畫:值沿著指定路徑移動(dòng)的動(dòng)畫,它比前兩種動(dòng)畫更加專業(yè)。
命名方式:類型名+AnimationUsingPath。如:PointAnimationUsingPath
⑥所有動(dòng)畫類都定義在System.Windows.Media.Animation命名空間下,共計(jì)42個(gè)。詳情見書P352-P353。
二、通過代碼創(chuàng)建動(dòng)畫
①每個(gè)依賴屬性每次只能響應(yīng)一個(gè)動(dòng)畫,如果開始第二個(gè)動(dòng)畫,將自動(dòng)放棄第一個(gè)動(dòng)畫。
②線性插值動(dòng)畫的常用屬性:
From屬性:屬性開始值。
若沒有硬編碼屬性值,此時(shí)動(dòng)畫省略設(shè)置該屬性的話,動(dòng)畫無法執(zhí)行會(huì)報(bào)錯(cuò),因?yàn)闊o法獲取該屬性值。
PRivate void myButtonn_Click(object sender, RoutedEventArgs e){ DoubleAnimation wa = new DoubleAnimation(); wa.From = myButtonn.ActualWidth; wa.To = this.Width - 30; wa.Duration = TimeSpan.FromSeconds(5); myButtonn.BeginAnimation(Button.WidthProperty, wa);}ActualWidth屬性指按鈕當(dāng)前渲染時(shí)的寬度。這樣設(shè)置意味著即使在動(dòng)畫執(zhí)行中單擊按鈕,也不會(huì)使動(dòng)畫從頭再來。To屬性:屬性結(jié)束值。
若省略To屬性,則意味著回到元素的原始屬性值。
By屬性:創(chuàng)建按設(shè)置的值改變動(dòng)畫,而不是給定目標(biāo)值。會(huì)實(shí)現(xiàn)元素觸發(fā)一下,變化一點(diǎn)的效果。
private void myButtonn_Click(object sender, RoutedEventArgs e){ DoubleAnimation wa = new DoubleAnimation(); wa.From = myButtonn.ActualWidth; wa.By = 10; wa.Duration = TimeSpan.FromSeconds(5); myButtonn.BeginAnimation(Button.WidthProperty, wa);}Duration屬性:動(dòng)畫執(zhí)行時(shí)間。三、動(dòng)畫的生命周期①WPF動(dòng)畫是暫時(shí)的,它不會(huì)能真正改變基本屬性的值。
②當(dāng)動(dòng)畫執(zhí)行完成時(shí),通過代碼設(shè)置元素屬性值是不起作用的,這是因?yàn)樵貙傩詢?yōu)先使用動(dòng)畫之后的值。
③通過設(shè)置AutoReverse屬性為True,可反轉(zhuǎn)動(dòng)畫。
④FillBehavior屬性。通常該屬性值為HoldEnd,這意味著動(dòng)畫結(jié)束后,元素屬性值為動(dòng)畫結(jié)束后的值。若設(shè)置該屬性值為Stop,則意味著只要?jiǎng)赢嫿Y(jié)束,屬性就會(huì)自動(dòng)恢復(fù)為原來的值。
⑤AccelerationRatio屬性加速動(dòng)畫執(zhí)行速度,DecelerationRatio屬性減速動(dòng)畫執(zhí)行速度,兩個(gè)值都用百分比表示。
通過加速和減速的動(dòng)畫看上去更加自然。
⑥RepeatBehavior屬性可控制如何重復(fù)運(yùn)行動(dòng)畫。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注