1. 程式人生 > >Silverlight & Blend動畫設計系列二:旋轉動畫(RotateTransform)

Silverlight & Blend動畫設計系列二:旋轉動畫(RotateTransform)

target width duration pac 操作 縮放 () rop pri

Silverlight的基礎動畫包括偏移、旋轉、縮放、傾斜和翻轉動畫,這些基礎動畫毫無疑問是在Silverlight中使用得最多的動畫效果,其使用也是非常簡單的。相信看過上一篇《偏移動畫(TranslateTransform)》文章的朋友大多數對Silverlight & Blend動畫設計已經產生了莫大的興趣,本篇將繼續介紹Silverlight中的基礎動畫之旋轉動畫(RotateTransform)。

  所謂旋轉動畫(RotateTransform)也就是一個元素以一個坐標點為旋轉中心點旋轉,在使用旋轉動畫(RotateTransform)的時候需要註意的有兩點:旋轉中心點(Center)

旋轉角度(Angle)。同樣當我們設計好動畫元素後要為其創建動畫效果,首先得添加動畫容器時間線(Storyboard),直接在Blend設計界面既可完成該操作。如下圖所示:

        技術分享圖片

  當動畫容器時間線創建好後,只需要選中需要進行創建動畫的元素,然後再屬性面板下進行可視化屬性設置就可以完成動畫的創建,轉到“轉換”屬性面板,然後選擇“旋轉”,可以看到如下圖所示的屬性設置面板。

        技術分享圖片

  如上圖示,將動畫旋轉角度(Angle)設置為了360,這表示動畫作用元素將以旋轉中心坐標進行旋轉360度。此時切換到XAML編碼視圖可以發現Blend自動生成了如下動畫代碼塊:

<Storyboard x:Name="Storyboard1">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetName="fan"
Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)">
<EasingDoubleKeyFrame KeyTime="00:00:01" Value="360"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>

  執行這個旋轉動畫可以看到效果,名為“fan”的元素將在一秒鐘內旋轉360度。同樣也可以通過編程的方式來動態的創建該旋轉動畫,詳細如下代碼塊:

技術分享圖片 private void CreateStoryboard()
{
//創建動畫容器時間線
Storyboard storyboard = new Storyboard();
//創建旋轉動畫
DoubleAnimation doubleAnimation = new DoubleAnimation();
doubleAnimation.To = 360;
doubleAnimation.Duration = new Duration(new TimeSpan(0, 0, 1));
Storyboard.SetTarget(doubleAnimation, fan);
Storyboard.SetTargetProperty(doubleAnimation,
new PropertyPath("(UIElement.RenderTransform).(TransformGroup.Children)[2].(RotateTransform.Angle)"));
storyboard.Children.Add(doubleAnimation);

storyboard.Begin();
} 技術分享圖片

        技術分享圖片

  或許有人會問,旋轉動畫我該怎麽去用,什麽樣的場景適合使用旋轉動畫?其實很多地方都可以使用旋轉動畫,比如遊戲中的地圖場景中的風車,實際上也就是一個旋轉動畫效果,旋轉動畫下面是一條線作為風車的柱子。我們直接在本文的示例項目中加入一條豎線,線的一端對應於旋轉動畫的中心,通過Blend設計後動態生成的XAML編碼如下:

技術分享圖片 <Canvas Canvas.ZIndex="-1" x:Name="Line">
<Path x:Name="path" Stretch="Fill" Stroke="Black" Height="194.494" Width="1" UseLayoutRounding="False"
Canvas.Left="303" Canvas.Top="184" Data="M408,256 L408,449.49417" StrokeThickness="6" Opacity="0.78"
StrokeStartLineCap="Round" StrokeEndLineCap="Round">
<Path.Fill>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Color="#FFBA6161" Offset="0"/>
<GradientStop Color="#FF306C0A" Offset="1"/>
</LinearGradientBrush>
</Path.Fill>
</Path>
</Canvas> 技術分享圖片

   註意上面設置ZIndex值是為了將線條呈現到旋轉動畫的後面去,這樣給人一種旋轉動畫是在線條的一端不停的選擇,看起就像是一個風車在旋轉一樣,實際上就是一種視覺欺騙,記得我一個做3D遊戲開發的朋友給我說過,3D遊戲裏的大多數效果全都是視覺欺騙,嘎嘎~~~~~~~~~~,OK,現在運行動畫的效果則如下截圖:

          技術分享圖片

  這樣的效果貌似不好看,我們可以為其他加入背景圖片進行裝飾,根據背景圖片進行調整適當的位置、元素顏色、形狀等,以更為真實的效果呈現在用戶面前。具體的調整過程這裏就不作過多的介紹,給個上了背景的截圖演示下吧:

        技術分享圖片

Silverlight & Blend動畫設計系列二:旋轉動畫(RotateTransform)