WPF中的動畫 (五)關鍵幀動畫

2021-09-26 08:35:32 字數 2012 閱讀 9088

與 from/to/by 動畫類似,關鍵幀動畫以也可以以動畫形式顯示目標屬性值。 和from/to/by 動畫不同的是, from/to/by 動畫只能控制在兩個狀態之間變化,而關鍵幀動畫則可以在多個狀態之間變化,例如,對於前面那個改變按鈕寬度的例子,如果我們要實現如下效果:

雖然我們可以用三個from/to/by 動畫組合實現類似效果,但是這樣一來麻煩,二來要感知動畫完成事件,不方便在xaml中使用。此時我們則可以使用關鍵幀動畫來快速實現這一過程。

varwidthanimation = newdoubleanimationusingkeyframes();

varkeyframes = widthanimation.keyframes;

keyframes.add(newlineardoublekeyframe(0, timespan.fromseconds(0)));

keyframes.add(newlineardoublekeyframe(350, timespan.fromseconds(2)));

keyframes.add(newlineardoublekeyframe(50, timespan.fromseconds(7)));

keyframes.add(newlineardoublekeyframe(200, timespan.fromseconds(9)));

button.beginanimation(widthproperty, widthanimation);

可以看出,關鍵幀動畫將每乙個狀態制定為乙個關鍵幀,關鍵幀動畫時間線自動連線各個關鍵幀,並計算過渡狀態,完成動畫。因此,某種程度上,我們也可以把from/to/by 動畫看成是只有兩個狀態的特殊關鍵幀動畫。

內建的關鍵幀動畫

與 from/to/by 動畫一樣,在名字空間system.windows.media.animation 下也內建了大量關鍵幀動畫,它們的命名規則是:    

《型別》 animationusingkeyframes

例如這兒使用的doubleanimationusingkeyframes,其它型別請參看msdn:關鍵幀動畫概述,這裡就不列舉了。

插值演算法

在關鍵幀動畫中,我們除了定義關鍵幀外,還需要定義兩個關鍵幀之間的插值演算法,這樣系統才能根據關鍵幀和插值演算法生成中間狀態。wpf系統內建四種插值演算法:

綜上來看,線性演算法最常用,樣條演算法能實現精準加速和減速控制。離散的這種硬切換的效果雖然看起來沒有什麼動畫效果,但用於連線關鍵幀還是比較常用的。另外在一些硬過渡的地方也是能用到的,例如實現閃爍效果。

值得一提的是,並不是所有關鍵幀動畫都支援這幾種演算法的,具體支援情況請參看msdn:關鍵幀動畫概述。 當然,對於不支援的也是可以自己手動實現的。

關鍵幀(ikeyframe)

前面已經介紹過,乙個關鍵幀主要有時間點和插值演算法兩部分組成,在wpf中,不同的關鍵幀動畫對應著同的關鍵幀物件,它們都繼承自ikeyframe介面,其命名規則為:

《型別》 keyframe

例如,doubleanimationusingkeyframes對應的是doublekeyframe,但由於這個類並沒有制定插值演算法,它只是乙個抽象基類,再加上插值演算法後對應的關鍵幀類命名規範為:

《插值演算法》《型別》 keyframe

例如,doublekeyframe對應的幾種插值演算法的關鍵幀為:lineardoublekeyframe、discretedoublekeyframe、splinedoublekeyframe、easingdoublekeyframe。這些關鍵幀物件使用的方式都比較類似,這裡就不多介紹了。

關鍵幀的時間點(keytime)

關鍵幀的時間點由ikeyframe.keytime屬性指定。它是乙個keytime型別,它有如下幾種取值型別:

<

lineardoublekeyframe

value="

100"

keytime="

0:0:3

" />

動畫(過渡動畫 關鍵幀動畫)

過渡動畫 寫到css樣式裡 transition all 1s ease in out 2s 變化曲線的值 ease 預設值,先快再快再慢 ease in 淡入 動畫剛開始的時候變化慢 ease out 淡出 動畫快結束的時候變化慢 ease in out 淡入淡出 開始慢,中間塊,結束慢 line...

關鍵幀動畫CAKeyframeAnimation

介紹關鍵幀動畫之前先介紹一下什麼是補間動畫 補間動畫 兩個值發生改變,中間產生的動畫效果叫做部件動畫 關鍵幀動畫與基礎動畫的區別 基礎動畫只能是某個屬性的初始值到另乙個值產生的動畫效果 關鍵幀動畫支援多個值 values 或者乙個路徑 path 關鍵幀動畫的屬性 cakeyframeanimatio...

iOS開發之關鍵幀動畫

cabasicanimation揭示了大多數隱式動畫背後以來的機制,但是顯示的給圖層新增cabasicanimation相較於隱式動畫而言,之恩能夠說是非禮不討好。cakeyframeanimation是一種uikit沒有暴露出來但是功能強大的類。和cabasicanimation類似,cakeyf...