silverlight中 Storyboard(动画)的使用,实现球的上下循环移动,左右移动,及旋转功能
话说,总结应该是个收获的心情,可现在的自己似乎没感觉到哪个喜悦的心情,说明自己做得还不够好,现在还是把一些做好的东西总结下。“总结”是学习,工作中必须的,不能偷这个懒 o(╯□╰)o
实现上下循环移动的关键代码是:
首先创建一个计时器
rollTimer = new DispatcherTimer();
rollTimer.Interval = TimeSpan.FromMilliseconds();
rollTimer.Tick += new EventHandler(rollTimer_Tick);
rollTimer.Start();
此计时器设置的间隔期是1秒 也就是说1秒后会触发此事件rollTimer_Tick,然后我在此事件中,让球从上往下移动(用时0.5秒),然后此动画(故事板Storyboard)结束后,触发另一个事件(这个事件的控制是,让球从下往上移动,用时0.5秒),这样在这1秒中,球就实现了,上下循环移动。然后计时器的控制,可隔1秒后触发rollTimer_Tick事件,也就是说能让它循环。到一定的时间,将计时器停止就可将该事件停止。
rollTimer_Tick中的关键代码为:
public void rollTimer_Tick(object sender,EventArgs e)
{
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
Storyboard.SetTarget(da, ellipse);
sbd.Completed += new EventHandler(sbd_Completed);
sbd.FillBehavior = FillBehavior.HoldEnd;
sbd.Children.Add(da);
sbd.Begin();
}
故事板结束后触发的事件sbd_Completed为:
#region 下半部分,使其由下往上移动
private void sbd_Completed(object sender, EventArgs e)
{
if (i == )
{
rollTimer.Stop();
NumTimer.Stop();
}
else
{
sbd.Stop();
sbd.Children.Clear();
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds(0.5));
Storyboard.SetTarget(da, ellipse); Storyboard.SetTargetProperty(da, new PropertyPath(Canvas.TopProperty));
sbd.FillBehavior = FillBehavior.HoldEnd;
sbd.Children.Add(da);
sbd.Children.Add(da11);
sbd.Begin();
}
}
实现左右移动的关键代码是:
能实现上下移动,左右移动也就同理了,只要改变一下 Storyboard.SetTargetProperty(da11, new PropertyPath(Canvas.TopProperty)); 这个代码,让Canvas.TopProperty 变为Canvas.LeftProperty即可。
Storyboard sbd = new Storyboard();
DoubleAnimation da = new DoubleAnimation();
da.From = ;
da.To = ;
da.Duration = new Duration(TimeSpan.FromSeconds());
Storyboard.SetTarget(da, ellipse5);
Storyboard.SetTargetProperty(da, new PropertyPath (Canvas.LeftProperty));
sbd.Children.Add(da);
实现旋转的关键代码是:
首先看下我xaml的布局,对球是这样设计的
<Ellipse x:Name="ellipse5" Canvas.Top="" Canvas.Left="" Width="" Height="" Stroke="Black" StrokeThickness="" >
<Ellipse.Fill>
<LinearGradientBrush StartPoint="0,0" EndPoint="0,1">
<GradientStop Offset="" Color="#E2E0C8" />
<GradientStop Offset="" Color="#FFFF00" />
<GradientStop Offset="0.4" Color="#978B00"/>
<GradientStop Offset="0.6" Color="#686001"/>
<GradientStop Offset="0.8" Color="#978B00"/>
</LinearGradientBrush>
</Ellipse.Fill>
<Ellipse.RenderTransform>
<RotateTransform Angle="" CenterX="" CenterY=""></RotateTransform>
</Ellipse.RenderTransform>
</Ellipse>
这一行代码 <RotateTransform Angle="0" CenterX="25" CenterY="25"></RotateTransform> 是设置球的旋转中心,旋转中心的设置为 CenterX=25,CenterY=25 而这个的设置又是球的Width="55" Height="55",照理来说应该是其一半,所以其实25是有点不精确的 \(^o^)/~
后台控制其旋转的代码为:
DoubleAnimation da11 = new DoubleAnimation();
da11.From = ;
da11.To = ;
da11.Duration = new Duration(TimeSpan.FromSeconds());
Storyboard.SetTarget(da11, ellipse5);
Storyboard.SetTargetProperty(da11, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)"));
注意不同的点: From=0,To=360 和 Storyboard.SetTargetProperty(da11, new PropertyPath("(Ellipse.RenderTransform).(RotateTransform.Angle)")); 这样也就控制了其角度从0度旋转到360度,看起来也就像是圆的旋转咯。
最后效果图:


虽然看不出动画效果,嗯,我是想纪念下我实现了我想要的效果,O(∩_∩)O哈哈~
silverlight中 Storyboard(动画)的使用,实现球的上下循环移动,左右移动,及旋转功能的更多相关文章
- Silverlight & Blend动画设计系列十:Silverlight中的坐标系统(Coordinate System)与向量(Vector)运动
如果我们习惯于数学坐标系,那么对于Silverlight中的坐标系可能会有些不习惯.因为在Silverlight中的坐标系与Flash中的坐标系一样,一切都的颠倒的.在标准的数学坐标系中,X轴表示水平 ...
- Silverlight中动画的性能浅析
Silverlight中提供了StoryBoard实现动画,可是StoryBoard的性能实在不敢恭维,特别是动画很大的时候,计算机的CPU和内存的狂增,如此一来性能实在太差,在默认的动画效果中动画实 ...
- Silverlight中的拖拽实现的图片上传
原文 http://blog.csdn.net/dujingjing1230/article/details/5443003 在Silverlight中因为可以直接从系统的文件夹里面拖出来一个文件直接 ...
- WPF中的动画——(三)时间线(TimeLine)
WPF中的动画——(三)时间线(TimeLine) 时间线(TimeLine)表示时间段. 它提供的属性可以让控制该时间段的长度.开始时间.重复次数.该时间段内时间进度的快慢等等.在WPF中内置了如下 ...
- Silverlight中图片显示
silverlight中显示一个图片有很多的中方法,xaml中的image控件或者自定编写程序来生成image控件. silverlight中显示的图片只能是Bitmap, JPG, PNG(64位颜 ...
- Wpf(Storyboard)动画简单实例
原文:Wpf(Storyboard)动画简单实例 动画的三种变换方式 RotateTransform:旋转变换变化值:CenterX围绕转的圆心横坐标 CenterY纵坐标 Angle旋转角度(角度正 ...
- 【WPF学习笔记】[转]周银辉之WPF中的动画 && 晓风影天之wpf动画——new PropertyPath属性链
(一)WPF中的动画 动画无疑是WPF中最吸引人的特色之一,其可以像Flash一样平滑地播放并与程序逻辑进行很好的交互.这里我们讨论一下故事板. 在WPF中我们采用Storyboard(故事板)的方式 ...
- 一步一步学Silverlight 2系列(22):在Silverlight中如何用JavaScript调用.NET代码
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 一步一步学Silverlight 2系列(21):如何在Silverlight中调用JavaScript
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
随机推荐
- React Native填坑之旅--class(番外篇)
无论React还是RN都已经迈入了ES6的时代,甚至凭借Babel的支持都进入了ES7.ES6内容很多,本文主要讲解类相关的内容. 构造函数 定义侦探类作为例子. ES5的"类"是 ...
- 基于VC的ACM音频编程接口压缩Wave音频(三)
(三)音 频 数 据 的 压 缩 下 面 说 明 使 用 CODEC 实 现 音 频 压 缩 的 过 程:假 设 源 信 号 为8K 采 样.16bits PCM 编 码. 单 声 道. 长 度 为1 ...
- 无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护 的解决方案
无法导入以下密钥文件: xxxx.pfx,该密钥文件可能受密码保护.若要更正此问题,请尝试再次导入证书,或手动将证书安装到具有以下密钥容器名称的强名称 CSP: VS_KEY_A5A29909FF6D ...
- alfresco install in linux, and integrated with tesseract ocr
本文描述在Linux系统上安装Alfresco的步骤: 1. 下载安装文件:alfresco-community-5.0.d-installer-linux-x64.bin 2. 增加执行权限并执行: ...
- C2解题报告合集~
定时更新~ http://www.cnblogs.com/newbe/ http://www.cnblogs.com/newbe/p/4069834.html http://www.cnblogs.c ...
- MFC学习随笔(2)
在MFC中,有时需要多个类之间传递信息,一个共通的头文件是个不错的选择.如果在头文件中直接声明一个变量的话,势必会报出一个错误: error LNK2005: "struct my_glob ...
- MFC学习随笔(1)
最近在学习用MFC编写一个简单的界面.其实MFC并不是十分复杂的,经过一段时间的熟悉就可以实现许多基础功能.但是在编写的过程中,经常会遇到林林总总的bug,让人摸不到头脑.今天记录一个过去没有注意过的 ...
- 【转】C#Winform程序如何发布并自动升级(图解)
有不少朋友问到C#Winform程序怎么样配置升级,怎么样打包,怎么样发布的,在这里我解释一下打包和发布关于打包的大家可以看我的文章C# winform程序怎么打包成安装项目(图解)其实打包是打包,发 ...
- 在Ubuntu中安装Python3
首先,通过命令行安装Python3.2,只需要在终端中通过命令行安装即可: sudo apt-get install python3 一路yes. 因为Ubuntu很多底层采用的是Python2. ...
- nw.js 软件推荐:AxeSlide斧子演示:PPT的另一种可能(转)
AxeSlide斧子演示:PPT的另一种可能 一款简单有趣的演示文稿制作软件 AxeSlide斧子演示(www.axeslide.com),是一款简单有趣的演示文稿制作软件,基于H ...