WPF實現(xiàn)動畫效果(二)之From/To/By動畫
WPF動畫效果系列
WPF實現(xiàn)動畫效果(二)之From/To/By 動畫
WPF實現(xiàn)動畫效果(三)之時間線(TimeLine)
WPF實現(xiàn)動畫效果(五)之關(guān)鍵幀動畫
正文
我們所實現(xiàn)的的動畫中,很大一部分是讓一個屬性在起始值和結(jié)束值之間變化,例如,我在前文中實現(xiàn)的改變寬度的動畫:
var widthAnimation = new DoubleAnimation()
{
From = 0,
To = 320,
Duration = TimeSpan.FromSeconds(2),
RepeatBehavior = RepeatBehavior.Forever,
};
button.BeginAnimation(WidthProperty, widthAnimation);這個動畫實現(xiàn)了寬度在0和320之間的變化,由于寬度是一個double型,因此這里用的是DoubleAnimation。對于一些其它常見的類型,如Byte、Color、Int32、Size、Point等,在System.Windows.Media.Animation下都有相應(yīng)的過渡動畫實現(xiàn),命名規(guī)則是"數(shù)據(jù)結(jié)構(gòu)類型+Animation"這里就不多介紹了。
這種過渡動畫一般成為From/To/By 動畫,是因為它們是通過From、To、By三個屬性來決定了目標屬性的起始值和結(jié)束值。首先我們來看下這三個屬性代表的意義:
From:起始值,在動畫開始的時候?qū)⒛繕藢傩栽O(shè)置為該值
To:結(jié)束值,動畫結(jié)束是目標屬性為改值
By:偏移值:動畫結(jié)束的時候目標屬性為"初始值+偏移值"
很明顯,To和By的效果是有可能沖突的。實際上,這三個屬性都是可選設(shè)置的,并且在設(shè)置了To和By的時候,是會忽略By屬性的。下面我再通過一些簡單的場景介紹一下這三個屬性如何組合使用。
由0 變?yōu)?320:From = 0, To = 320
由初始值變?yōu)?20:To = 320
由0變?yōu)槌跏贾担篎rom = 0
由0增大150:From = 0, By = 150
由初始值增大150:By = 150
看了這幾個用例后,相信大家已經(jīng)大致能明白這三個參數(shù)的使用方法。
為什么這么設(shè)計
初一看上去,這種From、To、By的三參數(shù)設(shè)計得過于復雜,完全可以用From和To兩個參數(shù)可以確定,需要用到By的地方通過運算獲取。 甚至From和To也可以強制要求賦值,這樣就不會出現(xiàn)From和To都不賦值的這種非法情況了。為什么要這么設(shè)計呢? 我覺得有兩個原因:
這種比較靈活的方式可以方便將動畫和具體的對象分離出來,可以方便復用和組合。
方便在XAML中使用。如果像我上述的那樣的做法,很多時候需要取對象的初始值,用XAML編寫復雜的動畫時,這種操作并不是是很方便。
時間控制
這里只介紹了如何設(shè)置過渡動畫的起始狀態(tài)和終止狀態(tài),動畫還有一個比較重要部分是時間控制,如動畫時間段的長度、開始時間、重復次數(shù)、進度的快慢,結(jié)束通知等。這些都是在其基類TimeLine中控制的,下一章將單獨對其介紹。
參考資料
http://msdn.microsoft.com/zh-cn/library/aa970265(v=vs.110).aspx
到此這篇關(guān)于WPF實現(xiàn)動畫效果之From/To/By動畫的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

