Silverlight实用窍门系列:20.后台CS代码中创建四种常用的动画效果【附带源码实例】

简介:

   在实际项目中,我们通常会在XAML代码中创建控件的动画效果,但在某一些特殊情况下,需要后台进行动画效果的自定义修改。那么我们就需要用到本节中讲述的相关动画效果自创建知识。在Silverlight中常用的动画创建方式有4种分别为DoubleAnimation,ColorAnimation,PointAnimation,DoubleAnimationUsingKeyFrames。

    •DoubleAnimation是控制控件的某一些Double值的属性的变化来形成动画的,比如让某个空间的Opactiy变大变小,就是透明度变大变小。
•ColorAnimation是控制控件的颜色的渐变,从绿色变蓝色。
•PointAnimation是控制控件的Point点位置的变化而操作控件的动画效果的。如本例中的中心点位置
•DoubleAnimationUsingKeyFrames 这个是添加帧片段,在这些片段中控制了某个控件的某一些属性在时间轴上的变化

        DoubleAnimation,ColorAnimation,PointAnimation这三种动画基本上都有以下相似的属性:

    •TargetName(要进行动画动画处理的对象的名称)

    •TargetProperty(要进行动画动画处理的对象的属性)

    •BeginTime (触发动画的时间点)

    •From( 动画的起始值) 

    •To(动画的结束值) 

    •By(动画从起始值动画起始计算所需变化的总量)

    •Duration(时间线的持续时间)

    •RepeatBehavior (动画重复播放动画播放的时间、次数或类型)
        DoubleAnimationUsingKeyFrames动画则是其内部可以添加多种动画类型的关键帧分别是ColorAnimationUsingKeyFrames 、DoubleAnimationUsingKeyFrames 、PointAnimationUsingKeyFrames 等等,在这里不过多详述。

        现在我们首先看一个XAML文件,这里有4个按钮和4个可控制的控件通过点击不同的按钮我们调用不同的动画:

复制代码

  
  
< Canvas x:Name = " LayoutRoot " Background = " White " >
< Rectangle RadiusX = " 5 " RadiusY = " 5 " Fill = " #FFE8BE59 " Height = " 92 " Name = " rectangle1 " Stroke = " Black " StrokeThickness = " 1 " Width = " 148 " Canvas.Left = " 47 " Canvas.Top = " 76 " />
< Button Canvas.Left = " 47 " Canvas.Top = " 195 " Content = " 开始DoubleAnimation动画 " Height = " 23 " Name = " button1 " Width = " 148 " Click = " button1_Click " />
< Rectangle Canvas.Left = " 231 " Canvas.Top = " 76 " Fill = " Green " Height = " 92 " Name = " rectangle2 " RadiusX = " 5 " RadiusY = " 5 " Stroke = " Black " StrokeThickness = " 1 " Width = " 148 " />
< Rectangle Canvas.Left = " 414 " Canvas.Top = " 76 " Fill = " DarkGoldenrod " Height = " 92 " Name = " rect " Opacity = " 0.1 " RadiusX = " 5 " RadiusY = " 5 " Stroke = " Black " StrokeThickness = " 1 " Width = " 148 " />
< Button Canvas.Left = " 414 " Canvas.Top = " 195 " Content = " 开始ColorAnimation动画 " Height = " 23 " Name = " button2 " Width = " 148 " Click = " button2_Click " />
< Button Canvas.Left = " 231 " Canvas.Top = " 195 " Content = " 开始ColorAnimation动画 " Height = " 23 " Name = " button3 " Width = " 148 " Click = " button3_Click " />
< Button Canvas.Left = " 593 " Canvas.Top = " 195 " Content = " 开始PointAnimation动画 " Height = " 23 " Name = " button4 " Width = " 148 " Click = " button4_Click " />
< Ellipse Canvas.Left = " 579 " Canvas.Top = " 76 " Height = " 92 " Name = " ellipse1 " Fill = " Blue " Stroke = " Black " StrokeThickness = " 1 " Width = " 183 " >
< Ellipse.Clip >
< EllipseGeometry Center = " 100,100 " x:Name = " elgeome " RadiusX = " 90 " RadiusY = " 60 " />
</ Ellipse.Clip >
</ Ellipse >
</ Canvas >
复制代码

        现在我们看MainPage.xaml.cs文件。在本代码中进行了相关的动画操作。我们再创建4个全局的故事板:

复制代码

  
  
// 装载DoubleAnimation动画的故事板
Storyboard sboard = new Storyboard();
// 装载ColorAnimation动画的故事板
Storyboard colorboard = new Storyboard();
// 装载DoubleAnimationUsingKeyFrames动画的故事板
Storyboard keyFrameboard = new Storyboard();
// 装载PointAnimation动画的故事板
Storyboard pointboard = new Storyboard();
复制代码

        DoubleAnimation类型动画的后台代码创建以及操作:

复制代码

  
  
#region 后台代码添加DoubleAnimation动画
DoubleAnimation danima
= new DoubleAnimation();
// 设置rectangle1矩形控件的透明度的Double类型数字变化
danima.SetValue(Storyboard.TargetNameProperty, " rectangle1 " );
danima.SetValue(Storyboard.TargetPropertyProperty,
new PropertyPath( " UIElement.Opacity " ));
// 透明度从0.1到1
danima.From = 0.1 ;
danima.To
= 1 ;
danima.Duration
= new Duration( new TimeSpan( 0 , 0 , 5 ));
sboard.Children.Add(danima);
this .LayoutRoot.Resources.Add( " Storyboard " , sboard);
#endregion
复制代码

        ColorAnimation类型动画的后台代码创建以及操作:

复制代码

  
  
#region 后台代码添加ColorAnimation动画
ColorAnimation coloranima
= new ColorAnimation();
// 设置rectangle2矩形控件的颜色的改变动画
coloranima.SetValue(Storyboard.TargetNameProperty, " rectangle2 " );
coloranima.SetValue(Storyboard.TargetPropertyProperty,
new PropertyPath( " (Shape.Fill).(SolidColorBrush.Color) " ));
// 设置颜色动画从绿色变到蓝色
coloranima.From = Colors.Green;
coloranima.To
= Colors.Blue;
colorboard.Children.Add(coloranima);
LayoutRoot.Resources.Add(
" colorboard " , colorboard);
#endregion
复制代码

        PointAnimation类型动画的后台代码创建以及操作:

复制代码

  
  
#region 后台代码添加PointAnimation动画
PointAnimation pointanima
= new PointAnimation();
// EllipseGeometry的中心点的变化
pointanima.From = new Point( 100 , 100 );
pointanima.To
= new Point( 200 , 100 );
// 经过2秒的时间
pointanima.Duration = new TimeSpan( 0 , 0 , 2 );
// 设置EllipseGeometry控件的中心点EllipseGeometry.CenterProperty位置的变化
Storyboard.SetTarget(pointanima, elgeome);
Storyboard.SetTargetProperty(pointanima,
new PropertyPath(EllipseGeometry.CenterProperty));
pointboard.Children.Add(pointanima);
LayoutRoot.Resources.Add(
" pointboard " , pointboard);
#endregion
复制代码

        DoubleAnimationUsingKeyFrames类型动画的后台代码创建以及操作:

复制代码

  
  
#region 后台代码添加DoubleAnimationUsingKeyFrames动画
DoubleAnimationUsingKeyFrames dakeyframe
= new DoubleAnimationUsingKeyFrames();
// 设置rect矩形控件的Opacity透明度,并且开始动画事件为0秒的时候。
Storyboard.SetTarget(dakeyframe,rect);
Storyboard.SetTargetProperty(dakeyframe,
new PropertyPath( " UIElement.Opacity " ));
dakeyframe.BeginTime
= new TimeSpan( 0 , 0 , 0 );

// 添加一个在第二秒的时候Opacity透明度值为1的关键帧
SplineDoubleKeyFrame SKeyFrame = new SplineDoubleKeyFrame();
SKeyFrame.KeyTime
= KeyTime.FromTimeSpan(TimeSpan.FromSeconds( 2 ));
SKeyFrame.Value
= 1 ;
dakeyframe.KeyFrames.Add(SKeyFrame);

// 添加一个在第四秒的时候Opacity透明度值为0.1的关键帧
SplineDoubleKeyFrame SKeyFrame1 = new SplineDoubleKeyFrame();
SKeyFrame1.KeyTime
= KeyTime.FromTimeSpan(TimeSpan.FromSeconds( 4 ));
SKeyFrame1.Value
= 0.1 ;
dakeyframe.KeyFrames.Add(SKeyFrame1);

keyFrameboard.Children.Add(dakeyframe);
#endregion
复制代码

        以上就是4中动画的后台创建方式,相关的注释也在代码中,在这里就不一一解释。最后点击相应的按钮,运行相应的故事板Begin()方法开始动画。

        本实例采用VS2010+Silverlight4.0编写。点击 SLAnimation.rar 下载本实例源码。预览图如下所示:




    本文转自程兴亮博客园博客,原文链接:http://www.cnblogs.com/chengxingliang/archive/2011/03/07/1974436.html,如需转载请自行联系原作者
相关文章
|
C# 前端开发
silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之阳光灿烂篇(Blend 4开发) 前面我们画了一只会飞动的小鸟,今天我们在目标是一个会发光的太阳。本章节的动画虽然简单,但是实现的效果可是一点也不打折。
1270 0
|
C#
silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之会飞的小鸟篇(Blend 4开发) 本教程基本涵盖了WPF和silverlight中的各种动画。先上张效果图。 声明下,这个做的不是让大家照搬的,只是让大家熟悉下动画效果,这个成品基本涵盖了sl里面所有的动画效果。
1557 0
|
C#
silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之迟来的第三章 动画整合篇(Blend 4开发) 有个问题想请教下大家,我仿了腾讯的SL版QQ,相似度95%以上。我想写成教程教大家怎么开发出来,会不会有版权什么问题的。
1362 0
|
前端开发 C#
silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之白云飘,坐车去旅游篇(Blend 4开发) 这章有点长,所以我分成了两章。这一章主要是准备工作,差不多算美工篇吧,这章基本不会介绍多少动画效果,主要讲的是blend中工具的使用,利用哪些工具做出哪些效果。
1393 0
|
前端开发 C#
silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发)
原文:silverlight,WPF动画终极攻略之番外 3D切换导航篇(Blend 4开发) 这篇介绍的是3D导航,点击图标,页面360°翻转的效果!有什么不足的欢迎大家指出来。 1.新建一个usercontrol,命名为menu. 2.按照下图设置一下属性。
1365 0
|
容器
Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)
原文:Silverlight & Blend动画设计系列二:旋转动画(RotateTransform)   Silverlight的基础动画包括偏移、旋转、缩放、倾斜和翻转动画,这些基础动画毫无疑问是在Silverlight中使用得最多的动画效果,其使用也是非常简单的。
1173 0
|
容器 数据可视化 内存技术
Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)
原文:Silverlight & Blend动画设计系列一:偏移动画(TranslateTransform)   用户界面组件、图像元素和多媒体功能可以让我们的界面生动活泼,除此之外,Silverlight还具备动画功能,它可以让应用程序“动起来”。
908 0
Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)
原文:Silverlight & Blend动画设计系列四:倾斜动画(SkewTransform)   Silverlight中的倾斜变化动画(SkewTransform)能够实现对象元素的水平、垂直方向的倾斜变化动画效果。
974 0
|
容器
Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)
原文:Silverlight & Blend动画设计系列五:故事板(StoryBoards)和动画(Animations)   正如你所看到的,Blend是一个非常强大的节约时间的设计工具,在Blend下能够设计出很多满意的动画作品,或许他具体是怎么实现的,通过什么方式实现的我们还是一无所知。
1064 0
Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)
原文:Silverlight & Blend动画设计系列七:模糊效果(BlurEffect)与阴影效果(DropShadowEffect)   模糊效果(BlurEffect)与阴影效果(DropShadowEffect)是两个非常实用和常用的两个特效,比如在开发相册中,可以对照片的缩略图添加模糊效果,在放大照片的过程中动态改变照片的大小和模糊的透明度来达到一个放大透明的效果。
1195 0

热门文章

最新文章