SilverLight動畫緩沖具體操作指南
對于開發(fā)人員來說,他們每天面對的都是一串一串無聊的代碼行。而且程序出來后實現(xiàn)的效果也是比較單一的。但是應(yīng)用上SilverLight后,其效果就會發(fā)生很大的變化。在這里我們就會為大家詳細分析一下有關(guān)SilverLight動畫緩沖的相關(guān)概念。#t#
SilverLight動畫緩沖設(shè)計的目的是可以讓你創(chuàng)建和使用多種特殊的動畫效果,包括以下會介紹的反彈或叫做“跳躍”效果(bouncing or "spring" effects)。Silverlight 3.0在命名空間System.Windows.Media.Animation namespace下內(nèi)置了許多緩沖功能。
使用動畫緩沖功能可以讓你很容易地讓對象產(chǎn)生很真實的動畫效果而不用你自己去研究物理學(xué)。
舉個例子,如果你想讓你的動畫產(chǎn)生一個很真實的“彈跳”,你或者可以自己研究一下物理學(xué)然后為它寫個程序,或者使用內(nèi)置的彈跳緩沖(bounce easing)功能,你可以通過使用animation標簽的的新的子標簽EasingFunction來實現(xiàn)它。
考慮一下這么一個情況。在Silverlight中,如果你想讓一個橢圓產(chǎn)生從屏幕頂部到底部的動畫,你需要使用一個< Storyboard>對象,里面包含一個< DoubleAnimation>指向橢圓的"Top"屬性。要是想給這個動畫增加緩沖,你只需要簡單地往里添加SilverLight動畫緩沖功能的定義,如下所示:
- < Canvas x:Name="LayoutRoot"
Background="White">- < Canvas.Resources>
- < Storyboard x:Name="bounce">
- < DoubleAnimation From="0" To="300"
Duration="0:0:10"- Storyboard.TargetName="myCircle"
- Storyboard.TargetProperty="(Canvas.Top)">
- < DoubleAnimation.EasingFunction>
- < BounceEase Bounces="10"
EasingMode="EaseOut" Bounciness="2">- < /BounceEase>
- < /DoubleAnimation.EasingFunction>
- < /DoubleAnimation>
- < /Storyboard>
- < /Canvas.Resources>
- < Ellipse x:Name="myCircle" Width="40"
Height="40" Fill="Red" Canvas.Top="0"
Canvas.Left="50">< /Ellipse>- < /Canvas>
加粗的EasingFunction的定義包含了你想要使用的緩沖的類型,不同的類型有不同的參數(shù)來定義緩沖。舉個例子,要模擬一個物體落下時的反彈,你只要指定開始和結(jié)束時的位置(Top從'From'0到'To'300),然后使用緩沖來定義彈跳的行為。在這個例子中是被設(shè)置成彈跳10次,而且是在動畫結(jié)束的時候開始彈跳(緩沖模式'EasingMode'被設(shè)置成'EaseOut')。
注意使用SilverLight動畫緩沖可以有3種方式:EaseIn,在這種模式下會在動畫結(jié)束的時候開始緩沖;EaseOut,動畫開始的時候開始緩沖;EaseInOut,兩種情況下都會發(fā)生。
所以如果你想象一個彈跳效果就像我們之前看到的在一個值上使用動畫讓它從0變到100,并使用彈跳緩沖,會發(fā)生以下的情況:
EaseIn:值從0開始向100移動,在到達100之前返回到0,再向100移動,再返回,每次都更接近100,直到到達100.
EaseOut:值從0開始向100移動,到達100后往0的方向移動,到達0之前返回100,再反彈,每次都離0更遠,直到停止在100上。
EaseInOut:是前2個的奇怪組合,在值超過一半之前按EaseIn的方式彈跳,超過一半后按EaseOut的方式彈跳。
你可以看到在我們之前的例子里我們使用了EaseOut的模式,因為它模擬球落下時的彈跳有更自然地效果。
所有內(nèi)置的SilverLight動畫緩沖都可以在System.Windows.Media.Animation命名空間下找到。以下的描述是基于EaseIn的模式。但是你可以從它推知EaseOut和EaseInOut中的效果。雖然下面有對這些功能的簡單的介紹,但是每個緩沖模式之間的區(qū)別可能是非常細微的。最好能夠試驗一下來體會。