WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(二)之From/To/By動(dòng)畫(huà)
WPF動(dòng)畫(huà)效果系列
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(一)之基本概念
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(二)之From/To/By 動(dòng)畫(huà)
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(三)之時(shí)間線(TimeLine)
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(四)之緩動(dòng)函數(shù)
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(五)之關(guān)鍵幀動(dòng)畫(huà)
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(六)之路徑動(dòng)畫(huà)
WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(七)之演示圖板
正文
我們所實(shí)現(xiàn)的的動(dòng)畫(huà)中,很大一部分是讓一個(gè)屬性在起始值和結(jié)束值之間變化,例如,我在前文中實(shí)現(xiàn)的改變寬度的動(dòng)畫(huà):
var widthAnimation = new DoubleAnimation() { From = 0, To = 320, Duration = TimeSpan.FromSeconds(2), RepeatBehavior = RepeatBehavior.Forever, }; button.BeginAnimation(WidthProperty, widthAnimation);
這個(gè)動(dòng)畫(huà)實(shí)現(xiàn)了寬度在0和320之間的變化,由于寬度是一個(gè)double型,因此這里用的是DoubleAnimation。對(duì)于一些其它常見(jiàn)的類型,如Byte、Color、Int32、Size、Point等,在System.Windows.Media.Animation下都有相應(yīng)的過(guò)渡動(dòng)畫(huà)實(shí)現(xiàn),命名規(guī)則是"數(shù)據(jù)結(jié)構(gòu)類型+Animation"這里就不多介紹了。
這種過(guò)渡動(dòng)畫(huà)一般成為From/To/By 動(dòng)畫(huà),是因?yàn)樗鼈兪峭ㄟ^(guò)From、To、By三個(gè)屬性來(lái)決定了目標(biāo)屬性的起始值和結(jié)束值。首先我們來(lái)看下這三個(gè)屬性代表的意義:
From:起始值,在動(dòng)畫(huà)開(kāi)始的時(shí)候?qū)⒛繕?biāo)屬性設(shè)置為該值
To:結(jié)束值,動(dòng)畫(huà)結(jié)束是目標(biāo)屬性為改值
By:偏移值:動(dòng)畫(huà)結(jié)束的時(shí)候目標(biāo)屬性為"初始值+偏移值"
很明顯,To和By的效果是有可能沖突的。實(shí)際上,這三個(gè)屬性都是可選設(shè)置的,并且在設(shè)置了To和By的時(shí)候,是會(huì)忽略By屬性的。下面我再通過(guò)一些簡(jiǎn)單的場(chǎng)景介紹一下這三個(gè)屬性如何組合使用。
由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
看了這幾個(gè)用例后,相信大家已經(jīng)大致能明白這三個(gè)參數(shù)的使用方法。
為什么這么設(shè)計(jì)
初一看上去,這種From、To、By的三參數(shù)設(shè)計(jì)得過(guò)于復(fù)雜,完全可以用From和To兩個(gè)參數(shù)可以確定,需要用到By的地方通過(guò)運(yùn)算獲取。 甚至From和To也可以強(qiáng)制要求賦值,這樣就不會(huì)出現(xiàn)From和To都不賦值的這種非法情況了。為什么要這么設(shè)計(jì)呢? 我覺(jué)得有兩個(gè)原因:
這種比較靈活的方式可以方便將動(dòng)畫(huà)和具體的對(duì)象分離出來(lái),可以方便復(fù)用和組合。
方便在XAML中使用。如果像我上述的那樣的做法,很多時(shí)候需要取對(duì)象的初始值,用XAML編寫(xiě)復(fù)雜的動(dòng)畫(huà)時(shí),這種操作并不是是很方便。
時(shí)間控制
這里只介紹了如何設(shè)置過(guò)渡動(dòng)畫(huà)的起始狀態(tài)和終止?fàn)顟B(tài),動(dòng)畫(huà)還有一個(gè)比較重要部分是時(shí)間控制,如動(dòng)畫(huà)時(shí)間段的長(zhǎng)度、開(kāi)始時(shí)間、重復(fù)次數(shù)、進(jìn)度的快慢,結(jié)束通知等。這些都是在其基類TimeLine中控制的,下一章將單獨(dú)對(duì)其介紹。
參考資料
http://msdn.microsoft.com/zh-cn/library/aa970265(v=vs.110).aspx
到此這篇關(guān)于WPF實(shí)現(xiàn)動(dòng)畫(huà)效果之From/To/By動(dòng)畫(huà)的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(六)之路徑動(dòng)畫(huà)
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(五)之關(guān)鍵幀動(dòng)畫(huà)
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(四)之緩動(dòng)函數(shù)
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(三)之時(shí)間線(TimeLine)
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(一)之基本概念
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果
- WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(七)之演示圖板
相關(guān)文章
C#發(fā)送Get、Post請(qǐng)求(帶參數(shù))
本文主要介紹了C#發(fā)送Get、Post請(qǐng)求,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09C#中DataTable實(shí)現(xiàn)行列轉(zhuǎn)換的方法
這篇文章主要介紹了C#中DataTable實(shí)現(xiàn)行列轉(zhuǎn)換的方法,實(shí)例分析了C#操作DataTable的相關(guān)技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04C#基礎(chǔ)之?dāng)?shù)組排序、對(duì)象大小比較實(shí)現(xiàn)代碼
C#基礎(chǔ)之?dāng)?shù)組排序、對(duì)象大小比較實(shí)現(xiàn)代碼,學(xué)習(xí)c#的朋友可以參考下。2011-08-08自定義實(shí)現(xiàn)Json字符串向C#對(duì)象轉(zhuǎn)變的方法
自定義實(shí)現(xiàn)Json字符串向C#對(duì)象轉(zhuǎn)變的方法,需要的朋友可以參考一下2013-03-03