[Windows 8 App]Storyboard------關鍵影格動畫(DoubleAnimationUsingKeyFrames)

[Windows 8 App]Storyboard------關鍵影格動畫(DoubleAnimationUsingKeyFrames)

 

DoubleAnimationUsingKeyFrames關鍵影格動畫一般包含LinearDoubleKeyFrame、SplineDoubleKeyFrame、DiscreateDoubleKeyFrame關鍵影格

這三種關鍵影格可以看成是動畫效果的一個組合

隨著動畫在時間線上進行,每個關鍵影格都會指定一個特定的值來產生不同的動畫效果

並且透過控制Double類型的屬性值可以使動畫以連接或間斷的方式進行播放

這是這三種關鍵影格的介紹:

LinearDoubleKeyFrame:使元素的屬性值在一段時間內進行固定速度的漸變

                                      即屬性值隨時間的改變而改變,並且這種改變會隨時地反應出來

SplineDoubleKeyFrame:對元素的屬性值進行精確的漸變,透過設定KeySpline屬性值可以控制漸變

                                      產生一個可變的過程

DiscreateDoubleKeyFrame:使元素的屬性值從一個值突變到另一個值,中間不會有任何的漸變或變化過程

 

下面實做一個DoubleAnimationUsingKeyFrames的範例

首先,新增一個【DoubleAnimationUsingKeyFrames】專案

開啟【MainPage.xaml】,下面是【MainPage.xaml】的完整程式碼:

 

<Page
    x:Class="DoubleAnimationUsingKeyFrames.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:DoubleAnimationUsingKeyFrames"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d">

    <Grid Background="White">
        <Ellipse x:Name="AnimationEllipse" PointerPressed="AnimationEllipse_Click" Fill="Blue" Width="300" Height="300" />
        <StackPanel>
            <StackPanel.Resources>
                <Storyboard x:Name="storyboard">
                    <DoubleAnimationUsingKeyFrames EnableDependentAnimation="True" 
Storyboard.TargetName="AnimationEllipse" Storyboard.TargetProperty="Width">
                        <LinearDoubleKeyFrame Value="200" KeyTime="0:0:0" />
                        <SplineDoubleKeyFrame KeySpline="0,0 1,0" Value="400" KeyTime="0:0:1" />
                        <SplineDoubleKeyFrame KeySpline="0.10, 0.21 0.00, 1.0" Value="150" KeyTime="0:0:2" />
                    </DoubleAnimationUsingKeyFrames>
                    </Storyboard>
            </StackPanel.Resources>
        </StackPanel>
    </Grid>
</Page>

 

在上面的程式碼中,先添加一個名為【AnimationEllipse】的Ellipse的元素,設置Fill的屬性為藍色

Width和Height屬性分別為300像素,並添加一個PointerPressed事件及事件處理方法

接著添加一個StackPanel元素中的Storyboard底下添加一個DoubleAnimationUsingKeyFrames動畫

並透過TargetProperty屬性設置動畫控制的目標屬性為Width

由於Width屬性值的變化會影響到介面布局,因此要將EnableDependentAnimation設為True,以確保能夠播放

 

在關鍵影格動畫DoubleAnimationUsingKeyFrames中添加一個LinearDoubleKeyFrame關鍵影格

並設定Value屬性為100,使用KeyTime屬性指定到關鍵影格Value值的時間為 0 秒

這表示動畫開始時,將Ellipse元素的寬度設為200像素

緊接著,再添加一個SplineDoubleKeyFrame關鍵影格,並設定Value屬性值為400,KeyTime屬性的值為 1

表示在 1 秒時,Ellipse元素的寬度將變為400

 

前面設計完畢後,開啟【MainPage.xaml.cs】,為AnimationEllipse_Click事件處理方法

程式碼如下:

private void AnimationEllipse_Click(object sender, PointerRoutedEventArgs e)
{
   storyboard.Begin();
}

 

專案執行畫面:

316

 

動畫影片: