一步一步学Silverlight 2系列(32):图形图像综合实例—“功夫之王”剧照播放

概述

Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, Ironpython,对JSON、Web Service、WCF以及Sockets的支持等一系列新的特性。《一步一步学Silverlight 2系列》文章将从Silverlight 2基础知识、数据与通信、自定义控件、动画、图形图像等几个方面带您快速进入Silverlight 2开发。

本文我们再实现一个图形图像实例——图片播放,并利用Storyboard实现一些动画效果。

今天我也当一回“标题当”:),其实就是实现一个简单的图片播放器,跟“功夫之王”剧照半点关系也没有,只不过我上网找了几张即将播出的的电影《功夫之王》的剧照,作为我们的示例图片。

实现效果

最终我们实现的效果如下,初始界面

TerryLee_Silverlight2_0163

点击左边或者右边小图片播放

TerryLee_Silverlight2_0164

再来一张播放中的

TerryLee_Silverlight2_0165

主要实现

在单击时动态改变图片的Source属性:

void Play()
{
    currentImg.Source = new BitmapImage(new Uri(index.ToString() + ".png", UriKind.Relative));

    int left = index == MIN ? MAX : index - 1;
    leftImg.Source = new BitmapImage(new Uri(left.ToString() + ".png", UriKind.Relative));

    int right = index == MAX ? MIN : index + 1;
    rightImg.Source = new BitmapImage(new Uri(right.ToString() + ".png", UriKind.Relative));
}

并通过Storyboard来改变Transform的一些值实现动画效果:

<Canvas.Resources>
    <Storyboard x:Name="myStoryboard">
        <DoubleAnimation
  Storyboard.TargetName="myTransform"
  Storyboard.TargetProperty="AngleY"
  From="0" To="180" Duration="0:0:5" RepeatBehavior="1x"/>
        <DoubleAnimation
  Storyboard.TargetName="leftScaleTransform"
  Storyboard.TargetProperty="ScaleX"
  From="0" To="1" Duration="0:0:5" RepeatBehavior="1x"/>
        <DoubleAnimation
  Storyboard.TargetName="leftScaleTransform"
  Storyboard.TargetProperty="ScaleY"
  From="0" To="1" Duration="0:0:5" RepeatBehavior="1x"/>
        <DoubleAnimation
  Storyboard.TargetName="rightScaleTransform"
  Storyboard.TargetProperty="ScaleX"
  From="0" To="1" Duration="0:0:5" RepeatBehavior="1x"/>
        <DoubleAnimation
  Storyboard.TargetName="rightScaleTransform"
  Storyboard.TargetProperty="ScaleY"
  From="0" To="1" Duration="0:0:5" RepeatBehavior="1x"/>
    </Storyboard>
</Canvas.Resources

大家可以从这里下载完整示例代码。

结束语

本文实现了一个简单的图片播放器,并利用Storyboard实现一些动画效果。

作者:TerryLee
出处:http://terrylee.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
Tag标签: Silverlight
posted @ 2008-03-21 22:42 TerryLee 阅读(10721) 评论(51)  编辑 收藏 网摘 所属分类: [03]  银光点亮世界

  回复  引用  查看    
#1楼 [楼主]2008-03-21 22:44 | TerryLee      
累的实在写不动了,就写一个简单的示例吧。。。
  回复  引用  查看    
#2楼 2008-03-21 22:47 | Q.Lee.lulu      
呵呵
辛苦了,写这么多也不容易了
  回复  引用  查看    
#3楼 [楼主]2008-03-21 22:49 | TerryLee      
@Q.Lee.lulu
谢谢支持,呵呵:)

这几天要好好休息一下了
  回复  引用  查看    
#4楼 2008-03-22 10:50 | Mahon      
支持老大,辛苦了,决定开始学这个了
  回复  引用  查看    
#5楼 2008-03-22 10:52 | Mahon      
汗,刚看第一篇运行环境要装VS2008,晕,留个记号
  回复  引用  查看    
#6楼 2008-03-22 15:25 | fox23      
简单,好让更多人上手,支持这类文章
  回复  引用  查看    
#7楼 2008-03-22 20:04 | candylight      
周六晚上把这个例子做一下,学习学习,谢谢TerryLee
  回复  引用  查看    
#8楼 [楼主]2008-03-22 21:29 | TerryLee      
@Mahon
好啊,现在微软可是力推这东西啊:)
  回复  引用  查看    
#9楼 [楼主]2008-03-22 21:30 | TerryLee      
@Mahon
当然需要安装VS2008了,呵呵:)
  回复  引用  查看    
#10楼 [楼主]2008-03-22 21:30 | TerryLee      
@fox23
谢谢
  回复  引用  查看    
#11楼 [楼主]2008-03-22 21:31 | TerryLee      
@candylight
别客气,多交流:)
  回复  引用  查看    
#12楼 2008-03-22 22:42 | 生鱼片      
这篇没支持呢,呵呵
支持下
  回复  引用  查看    
#13楼 [楼主]2008-03-23 00:09 | TerryLee      
@生鱼片
谢谢一直以来的支持:)
  回复  引用    
#14楼 2008-03-23 15:45 | GoneSky [未注册用户]
重大问题啊,一定得帮我想办法啊!
我制作的silverlig网站,客户端访问visual studio 提供的虚拟地址是用Application.Current.Host.Source(localhost:port/myWeb/)来获取的,在studio 中也能很好的访问,可是当部署的服务器的时候,就出问题啦,无法再访问了,我用我的服务器IP地址改动,替换了Application.Current.Host.Source所代表的地址,也不行啊。该怎么改动啊?
555555

  回复  引用    
#15楼 2008-03-23 21:28 | Duron800 [未注册用户]
这内容,老大果然“与时俱进”呀!
  回复  引用  查看    
#16楼 2008-03-23 22:51 | aito      
我是个新手,可以不告诉我开发Silverlight需要些什么工具呢?一定要在VS2008才行么?VS2005不行么?
  回复  引用  查看    
#17楼 2008-03-24 09:19 | 状元      
请教个问题:
<MediaElement AutoPlay="False" x:Name="Movie_wmv" source="a.mp3" .>
这是一个MediaElement
我在.cs文件里调用Movie_wmv.play()可以播放出声音
但是我想动态的指定一个要播放的文件
在.cs文件里指定source,要怎么写呢?
我是这样写的this.Movie_wmv.Source = new Uri("Movie.mp3", UriKind.Relative);
但是会报错!

  回复  引用  查看    
#18楼 [楼主]2008-03-24 21:28 | TerryLee      
@GoneSky
客户端访问visual studio?是什么意思?到底想访问什么呢?
  回复  引用  查看    
#19楼 [楼主]2008-03-24 21:28 | TerryLee      
@Duron800
因为我比较喜欢“杰哥”,呵呵
  回复  引用  查看    
#20楼 [楼主]2008-03-24 21:29 | TerryLee      
@aito
必须是VS2008
  回复  引用  查看    
#21楼 [楼主]2008-03-24 21:29 | TerryLee      
@状元
视频这块我还没看,回头看一下吧
  回复  引用    
#22楼 2008-03-26 20:44 | zsensi [未注册用户]
楼主,你好,有个问题部下

看了篇silverlight 1.0的文章,在控件的事件属性里用了和javascript差不多的语法来绑定了事件处理程序,如下:
<Ellipse MouseLeftButtonDown="javascript:onSphereButtonDown"
事件处理程序是在asp.net页面里定义的,

请问,这种方法在silverlight 2.0里还有无效的了?

之前试过,好似会编译错误。。

不知在silverlight 2.0里的相应方法是怎样的实现?
  回复  引用    
#23楼 2008-03-28 11:26 | studyBie [未注册用户]
博主不仅是个好同学,也是个好老师,写得很不错。
想请教一下,如何让Silverlight中的各个控件,像canvas,grid,等随浏览器窗口的大小变化而变化?谢谢
  回复  引用    
#24楼 2008-04-01 07:53 | studyBie [未注册用户]
silverlight 如何用简单的方法支持多国语言?最好是自动以浏览器的语言为准
  回复  引用  查看    
#25楼 2008-04-03 12:58 | aito      
请教下能不能在同一台机上同时装上VS2005和VS2008呢?
  回复  引用  查看    
#26楼 2008-04-09 17:14 | 二手的程序员      
@aito
能,先装vs2005 后装vs2008
不过,vs2005是vs2008 的子集,没有必要都装,只要装一个vs2008就可以了
  回复  引用    
#27楼 2008-04-21 21:51 | zhoucj [未注册用户]
问一下楼主,silverlight能实现类似Photoshop的滤镜功能吗
  回复  引用    
#28楼 2008-04-23 19:59 | GXX [未注册用户]
TerryLee,实在不好意思,问个与Silverlight无关的问题,因为怕你看不到,所以在这里问了。问题就是如何在dll类库项目中引用Web服务,比如ServiceReference1.WebService1SoapClient client = new PSO.ServiceReference1.WebService1SoapClient();就报错,说哦在 ServiceModel 客户端配置部分中,找不到引用协定“ServiceReference1.WebService1Soap”的默认终结点元素。这可能是因为未找到应用程序的配置文件,或者是因为客户端元素中找不到与此协定匹配的终结点元素。想问你怎么解决呢?谢谢。



  回复  引用  查看    
#29楼 2008-04-24 11:37 | tivan      
silveright 网站怎么部署到server 2003的机器上,
我机器上浏览都是空白的,要怎样设置????
  回复  引用  查看    
#30楼 2008-04-25 12:56 | snowwolflibo      
@tivan

浏览是空白的解决办法

方法如下:在IIS站点的属性页,打开主机头标签,添加mime类型,
1.扩展名为.xaml,类型为text/xml
2.扩展名为.xap 类型为application/x-silverlight-app
  回复  引用  查看    
#31楼 2008-04-26 00:35 | tivan      
谢谢!按照上面方法搞定!
  回复  引用  查看    
#32楼 2008-04-29 10:26 | E_wait      
老大辛苦!刚开始要学,希望能快点赶上走在前面的兄弟!哈哈
  回复  引用  查看    
#33楼 2008-05-08 13:44 | Longkin      
学习中阿
还没成功一个的
连安装都是问题。晕
  回复  引用  查看    
#34楼 2008-05-15 15:35 | tivan      
怎么用后台代码打开新的页面,
不是这样的
System.Uri uri = new Uri("uristring", UriKind.Relative);
System.Windows.Browser.HtmlPage.Window.Navigate(uri);
跳转

  回复  引用    
#35楼 2008-05-26 15:52 | xjtu_ok [未注册用户]
ActiveX控件在Silverlight里面根本就用不了啊,太悲哀了
  回复  引用  查看    
#36楼 2008-06-03 14:12 | 成长的强强      
现在对这个还没入门,以后再给楼主学习吧~
  回复  引用  查看    
#37楼 2008-06-26 11:21 | NMeteor      
李老师好,看完了这篇教程后我觉得有点美中不足的是中图的翻转效果是由一张图完成的,所以我尝试修改成由原图翻转90度再变成新图翻转90度的效果,但可惜功能不足多番修改未能成功特来请教李老师。中图的效果改成:
原图做以下动作(动作一):
<DoubleAnimation
Storyboard.TargetName="centerSkewTransform"
Storyboard.TargetProperty="AngleX" From="0" To="90"
Duration="0:0:1.5" RepeatBehavior="1x" />
<DoubleAnimation
Storyboard.TargetName="centerSkewTransform"
Storyboard.TargetProperty="AngleY" From="0" To="90"
Duration="0:0:1.5" RepeatBehavior="1x" />
新图做以下动作(动作二):
<DoubleAnimation
Storyboard.TargetName="centerSkewTransform"
Storyboard.TargetProperty="AngleX" From="90" To="180"
Duration="0:0:1.5" RepeatBehavior="1x" />
<DoubleAnimation
Storyboard.TargetName="centerSkewTransform"
Storyboard.TargetProperty="AngleY" From="90" To="180"
Duration="0:0:1.5" RepeatBehavior="1x" />
如何做到用原图做完"动作一"后不停顿的用新图做完"动作二"呢?或者也可以同时进行?这里先谢过李老师了,感恩您的付出。
  回复  引用  查看    
#38楼 2008-07-03 10:19 | 骑着夕阳看着猪      
我也支持下,非常适合初学者,如果能加些理论元素就更完美了!!!!
  回复  引用    
#39楼 2008-09-14 21:44 | 刘立军 [未注册用户]
写的真好!顶!!!!!!!!!!!!!!!!!!!!!!!!!!
  回复  引用  查看    
#40楼 [楼主]2008-09-17 00:44 | TerryLee      
@骑着夕阳看着猪
前面有三十多篇理论啊:)
  回复  引用  查看    
#41楼 [楼主]2008-09-17 00:44 | TerryLee      
@刘立军
谢谢!
  回复  引用  查看    
#42楼 2008-10-30 14:12 | 燕山又飘雪      
你好李老师:
currentImg.Source = new BitmapImage(new Uri(index.ToString() + ".png", UriKind.Relative));

我按照您的例子做的时候,怎么打new后,找不到 BitmapImage,挨个找也没有,请问是什么原因?我用的都是 2.0版本,
  回复  引用  查看    
#43楼 2008-10-30 14:17 | 燕山又飘雪      
哎,可怜我不认真,找到了
using System.Windows.Media.Imaging;
没有引用,
o(︶︿︶)oo(︶︿︶)o
  回复  引用  查看    
#44楼 [楼主]2008-10-30 17:54 | TerryLee      
@燕山又飘雪
o(∩_∩)o...
  回复  引用  查看    
#45楼 2008-10-30 19:41 | 燕山又飘雪      
李老师,
我现在用的是2.0,只能支持png格式的吗?我用了其它格式也能显示,但是MouseLeftButtonDown 的时候中间的image框中的图片就不显示了

还有能给点意见或者建议吗?
我想按照您上面的方法,点左边的按钮往左边平滑移动,点右边的按钮平滑的往右边移动,应该怎么实现?

还有,我看到后台代码照片的编号都是1,2,3,4,5,6等等,能不能给它起一个任意的名字,比如fly.png,img.png等

望您能在百忙中抽出点时间,帮我解答,再次谢过!
  回复  引用  查看    
#46楼 2008-11-13 08:37 | Rivers Zhao      
这是我见过的写的最好的silverlight中文学习系列!
  回复  引用  查看    
#47楼 [楼主]2008-11-15 00:30 | TerryLee      
@Rivers Zhao
过奖了,呵呵:)

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-03-21 22:44 编辑过
Google站内搜索



相关文章:


相关搜索:
Silverlight

相关链接:

历史上的今天:
2006-03-21 天津.NET俱乐部成立了!