一步一步学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 on 2008-03-21 22:42 TerryLee 阅读(8723) 评论(42)  编辑 收藏 所属分类: Silverlight

评论

#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 骑着夕阳看着猪      

我也支持下,非常适合初学者,如果能加些理论元素就更完美了!!!!   回复  引用  查看    


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

另存  打印
 


导航

公告

  • 网名:TerryLee
  • 本名:李会军
  • 位置:中国北京 Ethos
  • 联系方式:
  • 访问我的个人主页

 MVP配置

 个人主页

 版权声明

  • 本站采用创作共用许可 署名,非商业

绿色通道

IT新闻

统计

与我联系

留言簿(323)

我的标签

随笔分类

随笔档案

个人站点

关注项目

好的网站

我的好友

搜索

积分与排名

阅读排行榜

评论排行榜