Windows Phone开发(40):漫谈关键帧动画中篇

移动开发
尽管前面介绍的几种动画会让觉得很好玩了,但是,不知道你是否发现,在前面说到的一系列XXXAnimation中,都有一个共同点,那就是仅仅针对两个值的目标值之间产生动画,如果使用By,将在原值和加上By后的目标值之间进行动画处理;如果使用From,To,那就更好理解了,就是首尾两个值之间值的动画。

一、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>   

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

 

责任编辑:闫佳明 来源: oschina
相关推荐

2013-04-24 13:51:48

Windows PhoWindows Pho

2013-04-24 15:28:02

Windows PhoWindows Pho

2013-04-25 11:25:38

Windows PhoWindows Pho

2013-04-24 13:19:06

Windows Pho动画DoubleAni

2013-04-24 13:31:59

Windows Pho动画之ColorAni

2013-04-24 13:43:10

Windows Pho动画PointAnim

2018-09-21 15:26:45

大数据管理系统

2013-07-30 12:37:56

Windows PhoWindows Pho

2010-04-21 17:07:54

Windows Pho

2011-06-07 12:42:15

Windows Pho

2013-04-17 14:00:06

Windows PhoWindows Pho

2013-04-19 16:34:56

Windows PhoWindows Pho

2013-04-16 17:02:50

Windows Pho概论

2013-07-30 11:18:37

Windows PhoWindows Pho

2013-06-18 00:58:54

CocoStudio工Cocos2d-x

2023-06-16 09:45:36

2010-04-08 17:40:23

Windows Pho

2023-10-08 20:32:59

CSS定义Loading

2013-04-17 14:47:19

Windows PhoWindows Pho

2011-06-07 11:35:38

Windows Pho
点赞
收藏

51CTO技术栈公众号