zoukankan      html  css  js  c++  java
  • Windows Phone开发(40):漫谈关键帧动画之中篇 转:http://blog.csdn.net/tcjiaan/article/details/7559978

    一、DiscreteDoubleKeyFrame

    离散型关键帧动画,重点,我们理解一下“离散”的意思,其实你查一下《新华字典》,“离”和“散”的意思相近。我们可以这样解释:每个关键帧之间是直接过渡,其间不经过动画插补。似乎这样理解有点苦涩难懂,所以,我们还是从实例入手。

    请参考以下XAML代码写一个示例:

    1. <Grid Loaded="OnGridLoaded">  
    2.     <Rectangle Width="100" Height="100" Fill="Green" VerticalAlignment="Top">  
    3.         <Rectangle.RenderTransform>  
    4.             <TranslateTransform x:Name="trm"/>  
    5.         </Rectangle.RenderTransform>  
    6.     </Rectangle>  
    7.     <Grid.Resources>  
    8.         <Storyboard x:Name="std">  
    9.             <DoubleAnimationUsingKeyFrames Duration="0:0:5" RepeatBehavior="15"  
    10.                                            Storyboard.TargetName="trm"  
    11.                                            Storyboard.TargetProperty="Y">  
    12.                 <DiscreteDoubleKeyFrame KeyTime="0:0:2" Value="150"/>  
    13.                 <DiscreteDoubleKeyFrame KeyTime="0:0:3" Value="280"/>  
    14.                 <DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="380"/>  
    15.             </DoubleAnimationUsingKeyFrames>  
    16.         </Storyboard>  
    17.     </Grid.Resources>  
    18. </Grid>  

    在后台的C#代码中,千万不要记了启动动画,等下运行后发现动不了就麻烦了。

    1. private void OnGridLoaded(object sender, RoutedEventArgs e)  
    2. {  
    3.     this.std.Begin();  
    4. }  


     然后你可以运行了,注意认真观察动画的演变过程。

    不知道你观察到了什么?你是否发现,矩形向下运动的过程是直接跳跃式的,每个关键之间没有创建过渡效果,而且直接跳到对应值。

    二、DiscreteColorKeyFrame

    这也是一个离散型关键帧动画,从名字上我们知道,它是针对颜色进行动画处理的。还是看例子吧。

    请参考下面XAML代码写一个测试程序:

    1. <Grid Loaded="OnGridLoaded">  
    2.     <Ellipse Width="250" Height="250">  
    3.         <Ellipse.Fill>  
    4.             <SolidColorBrush x:Name="brush" Color="Blue"/>  
    5.         </Ellipse.Fill>  
    6.     </Ellipse>  
    7.     <Grid.Resources>  
    8.         <Storyboard x:Name="std">  
    9.             <ColorAnimationUsingKeyFrames Duration="0:0:8"  
    10.                                           RepeatBehavior="20"  
    11.                                           Storyboard.TargetName="brush"  
    12.                                           Storyboard.TargetProperty="Color">  
    13.                 <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Yellow"/>  
    14.                 <DiscreteColorKeyFrame KeyTime="0:0:5" Value="Gray"/>  
    15.                 <DiscreteColorKeyFrame KeyTime="0:0:7" Value="Red"/>  
    16.             </ColorAnimationUsingKeyFrames>  
    17.         </Storyboard>  
    18.     </Grid.Resources>  
    19. </Grid>  


    后台代码就不帖了,都懂得写什么了。

    然后运行一下,查看效果。

    从效果中可以看到,颜色的改变是没有平滑的过渡效果的,而是当时间线的播放时间到了关键帧所在的位置时,颜色是直接改变的。

    三、LinearColorKeyFrame

    线性颜色的关键帧与离散型动画相反,每个关键帧之间都创建平滑的过渡效果,让人看起来有连续感。

    请参考以下XAML代码写一个测试程序。

    1. <Grid Loaded="onGridLoaded">  
    2.     <Ellipse Width="300" Height="300" >  
    3.         <Ellipse.Fill>  
    4.             <RadialGradientBrush x:Name="rdGradientBrush" Center="0.5, 0.5"  
    5.                                  RadiusX="0.5" RadiusY="0.5">  
    6.                 <GradientStop Color="LightGreen" Offset="0"/>  
    7.                 <GradientStop Color="DarkGreen" Offset="1"/>  
    8.             </RadialGradientBrush>  
    9.         </Ellipse.Fill>  
    10.     </Ellipse>  
    11.     <Grid.Resources>  
    12.         <Storyboard x:Name="std">  
    13.             <ColorAnimationUsingKeyFrames Duration="0:0:6"  
    14.                                           RepeatBehavior="Forever"  
    15.                                           Storyboard.TargetName="rdGradientBrush"  
    16.                                           Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[0].(GradientStop.Color)">  
    17.                 <LinearColorKeyFrame KeyTime="0:0:1" Value="Orange"/>  
    18.                 <LinearColorKeyFrame KeyTime="0:0:3" Value="White"/>  
    19.                 <LinearColorKeyFrame KeyTime="0:0:6" Value="Pink"/>  
    20.             </ColorAnimationUsingKeyFrames>  
    21.             <ColorAnimationUsingKeyFrames Duration="0:0:6"  
    22.                                           RepeatBehavior="Forever"  
    23.                                           Storyboard.TargetName="rdGradientBrush"  
    24.                                           Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[1].(GradientStop.Color)">  
    25.                 <LinearColorKeyFrame KeyTime="0:0:3" Value="Yellow"/>  
    26.                 <LinearColorKeyFrame KeyTime="0:0:6" Value="Violet"/>  
    27.                 <LinearColorKeyFrame KeyTime="0:0:7" Value="SeaGreen"/>  
    28.             </ColorAnimationUsingKeyFrames>  
    29.         </Storyboard>  
    30.     </Grid.Resources>  
    31. </Grid>  


    页面上的正圆是使用径向渐变填充的,渐变颜色点有两个,我们分别对这两个渐变点的颜色进行线性动画处理,这样就会做出很漂亮的效果,如下面图片所示。

               

  • 相关阅读:
    逻辑实现与物理实现
    逻辑实现与物理实现
    可逆矩阵的逆
    可逆矩阵的逆
    算法 Tricks(三)—— 判断序列是否为等差数列
    算法 Tricks(三)—— 判断序列是否为等差数列
    C++ Tricks(一)—— 判断字符串 string 对象的所有字符都相等
    AndroidMainifest标签使用说明3——&lt;activity-alias&gt;
    支持向量机通俗导论(理解SVM的三层境地)
    iOS中,MRC和ARC混编
  • 原文地址:https://www.cnblogs.com/songtzu/p/2607097.html
Copyright © 2011-2022 走看看