使用silverlight中的Storyboard实现动画效果

文/代震军  出处/博客园

    在silverlight中,可以使用StoryBoard(故事板)不实现类似于动画的效果,本文就是借助该对象来实现一个相册显示的例子,其运行效果如下图所示(鼠标放在中间图片上,然后离开):
http://www.cnblogs.com/daizhj/archive/2008/07/14/1240834.html

    在正文开始之后,先介绍一下Storyboard, 其定义如下:
    Controls animations with a timeline, and provides object and property targeting information for its child animations.

    因为它用时间线(timeline)来控制,并提供了要绑定的对象和目标属性信息。其在XAML中的
格式如下:

Code


其中的oneOrMoreChildTimelines可以是如下任一或多个对象元素:
   
    Storyboard, ColorAnimation, ColorAnimationUsingKeyFrames, DoubleAnimation, DoubleAnimationUsingKeyFrames, PointAnimation, PointAnimationUsingKeyFrames
   
    下面就其中几个主要的元素作如下演示说明,首先请看“DoubleAnimation”:
   
    DoubleAnimation:当动画值的变化(FROM ...TO...)类型是 Double型时使用。
   
    下面演示的就是矩形(MyAnimatedRectangle)的“Opacity”(透明度)属性在一秒内从1到0
的动画(参数说明见注释)。

Code


ColorAnimation:当动画值的变化(FROM ...TO...)类型是 Color型时使用。
   
    下面演示的是myStackPanel背景色在4秒内从红到绿的动画。

Code


下面XAML代码与上面所示的实现效果相同:

Code


接下来是PointAnimation:  当动画值的变化(FROM ...TO...)类型是 Point型时使用。
   
    下面的XAML演示的是EllipseGeometry对象从point(20,200)移动到point(400,100)的动画。

Code


好了,有了上面的介绍之后,我们下面着手开发这个DEMO。

    首先我们建立一个silverlight application,并将其命名为:Animation_Sample。
   
    然后我们要去找几张相册用的图片,将其放在项目中的resource文件夹下,并将其设置为资源,
如下图所示:

 附件: 您所在的用户组无法下载或查看附件               

    然后在xaml中加入如下代码段作为Image元素对相应图片的引用:

Code


然后在该xaml文件上击鼠标右键,选择"在 Expression Blend 中打开"菜单项,然后在打开的Blend 窗口中
按下图中所指示的方式来创建一个Storyboard,名为:image1Storyboard .

 附件: 您所在的用户组无法下载或查看附件


    接着拖动当前帧到2秒处,执行“record keyframe”操作:

 附件: 您所在的用户组无法下载或查看附件



    然后对左侧的图片进行"rotate transfer"和"scale transfer"操作,如下图:

 附件: 您所在的用户组无法下载或查看附件



      而其最终的值如下图所示:

 附件: 您所在的用户组无法下载或查看附件
     
 
 
    这里我们可以通过下图所示演示一下当前图片从0秒到2秒的运行情况:

 附件: 您所在的用户组无法下载或查看附件

 
 
    同理对其它图片进行相类似的操作后,就可以将当前文件进行保存,并单击F5进行试运行了。接着,我们还要
再切换回VS完成动画播放的工作。在本DEMO中,因为使用了鼠标移入移出方式来实现动画的播放任务。所以我们
要在相应的xaml.cs文件中加入storyboard的"Begin()"方法绑定如下:

Code


这样就可以运行该DEMO了。
 
 
    到这里,我们只是实现了将图片从初始位置移动到指定位置。而没有实现reverse操作,即图片从分散展示状态
再回到实始状态。但实现这个功能也非常简单,主要是用了一个小技巧:

    1.首先我们要对当前的storyboard执行复制操作,如下图:

 附件: 您所在的用户组无法下载或查看附件
   
 
    2. 然后在新生成的storyboard中修改其名称,并对其进行reverse操作,如下图:

 附件: 您所在的用户组无法下载或查看附件
   
 
 
    这样我们就得到了一个对展开的“逆操作”的storyboard.然后我们在xaml.cs中调用这个storyboard的
Begin()方法即可,如下:

Code


通过Blend工具,我们非常轻松的实现了展示效果,这远比在XAML中手写代码要来得“简单正确”。
 
    好了,今天的内容就到这里了。
 
    源码下载链接,请点击这里:
 附件: 您所在的用户组无法下载或查看附件

 感谢原创者的辛勤劳动,希望对您有所帮助,转载请注明原出处。
 您可能对 [Silverlight] 的这些文章也感兴趣:

提高 Silverlight 应用程序性能的小贴士
Silverlight 初体验
Siverlight2 动态加载XAML文件
Silverlight 2中多语言支持实现(上)
SilverLight开发系列第3步:制作添加鼠标跟随效果,顺便熟悉一些基本概念:群组 和 动画
一步一步学Silverlight 2系列(31):图形图像综合实例—实现水中倒影效果
Silverlight读取xml
Silverlight 2 Beta 2发布
Silverlight监测工具:Silverlight Spy
Silverlight 2学习教程(一):开发Silverlight 2应用程序的准备工作