Windows Store App 偏移特效
通过前面讲解的内容,读者已经了解了如何在三维空间中使旋转对象绕指定的旋转中心旋转一定的角度。接下来在这个基础上进一步讲解如何对旋转对象进行平移。下面首先介绍一下用到的几个属性。
q LocalOffsetX,沿旋转对象平面的X轴平移对象。
q LocalOffsetY,沿旋转对象平面的Y轴平移对象。
q LocalOffsetZ,沿旋转对象平面的Z轴平移对象。
q GlobalOffsetX,沿着与屏幕对齐的X轴平移对象。
q GlobalOffsetY,沿着与屏幕对齐的Y轴平移对象。
q GlobalOffsetZ,沿着与屏幕对齐的Z轴平移对象。
上述LocalOffsetX、LocalOffsetY和LocalOffsetZ属性代表本地偏移属性,在透视转换中设置这些属性的值可以使界面元素沿着X轴、Y轴或Z轴平移。如果元素在平移的同时还伴随旋转,那么旋转会影响元素平移的方向,在视觉上使人觉得元素的平移已经脱离了屏幕所在平面。而GlobalOffsetX、GlobalOffsetY和GlobalOffsetZ属性则是全局偏移属性,它不同于本地偏移属性,即使元素在平移的同时还伴随着旋转,也不会影响元素的平移方向,即元素会在屏幕所在的平面进行平移。下面以本地偏移属性LocalOffsetX为例,实现旋转和平移相结合的3D动画效果。
启动Visual Studio 2012,新建一个Windows应用商店的空白应用程序项目,将其命名为Dynamic3DAnimation。本示例中将图片的3D特效与两个演示图板动画结合使用,每个动画分别控制PlaneProjection元素的RotationY和LocalOffsetX属性值,界面中的图片在三维立体空间中沿Y轴旋转的同时还会沿着X轴平移。在项目的Assets文件夹下添加一个名为“Windows 8.png”的图片文件,打开MainPage.xaml文件,使用如下代码替换原有的Grid元素。
<Grid Background="Gray">
<Grid.Resources>
<Storyboard x:Name="storyboard">
<!--此动画用于使图片沿着Y轴顺时针旋转45度-->
<DoubleAnimation Duration="0:0:3"
Storyboard.TargetName="MyPlaneProjection"
Storyboard.TargetProperty="RotationY"
To="60"
RepeatBehavior="Forever"/>
<!--此动画用于使图片沿X轴向右移动300像素-->
<DoubleAnimation Duration="0:0:3"
Storyboard.TargetName="MyPlaneProjection"
Storyboard.TargetProperty="LocalOffsetX"
To="300"
RepeatBehavior="Forever"/>
</Storyboard>
</Grid.Resources>
<StackPanel Width="200" Height="200" Background="White">
<Image Width="200" Height="200" PointerPressed="StartAnimation_Click" Source="/Assets/Windows 8.png">
<Image.Projection>
<PlaneProjection x:Name="MyPlaneProjection"/>
</Image.Projection>
</Image>
</StackPanel>
</Grid>
以上代码首先在Grid元素的资源字典Grid.Resources中添加了一个作为动画资源的Storyboard元素,并将其命名为storyboard,以便在后台文件中调用storyboard对象的Begin方法启动动画。接着在Storyboard 元素中添加两个DoubleAnimation动画,并分别设置这两个DoubleAnimation动画控制的属性为RotationY 和LocalOffsetX,从而可以控制界面元素的旋转和平移。同时通过Duration属性设定这两个DoubleAnimation动画的动画周期为3秒,并设置RepeatBehavior属性值为Forever,当动画周期结束时,动画还会重新播放。
在演示图板中添加完这两个DoubleAnimation动画之后,接下来又在Grid元素中添加了一个StackPanel元素,并在其中添加一个Image元素,将图片的路径赋值给Image元素的Source属性,然后为此元素的PointerPressed事件定义一个名为“StartAnimation_Click”的事件处理方法,以控制动画的播放。接着在Image.Projection元素中添加一个名为“MyPlaneProjection”的PlaneProjection元素,用于定义图片通过透视转换后在界面中呈现的方式。最后在两个DoubleAnimation动画中分别设置Storyboard元素的TargetName属性的值为MyPlaneProjection,将动画效果通过PlaneProjection元素定位到图片上。
接下来打开Dynamic3DAnimation.xaml.cs文件,为PointerPressed事件添加事件处理方法StartAnimation _Click,代码如下所示:
以上StartAnimation _Click事件处理方法通过调用storyboard对象的Begin方法启动3D动画的播放操作。按下F5运行程序,然后单击图片,可以看到屏幕中的图片会产生伴随旋转和平移的3D动画效果。如图10-12所示。
图10-12本地偏移3D动画效果图
在图10-12中,右侧的白色区域为图片原来的位置,动画开始时,屏幕中的图片朝着屏幕外侧旋转的同时也会沿X轴正方向移动。在本示例中如果将本地偏移属性LocalOffsetX替换为与之对应的全局偏移属性GlobalOffsetX,将会产生与之不同的3D动画效果,如图10-13所示。
图10-13 全局偏移3D动画效果图
至此已经介绍了如何在动画中设置本地偏移属性LocalOffsetX和全局偏移属性GlobalOffsetX的值来实现相应的3D动画效果。除此之外,读者可以参照前面讲解的示例在动画中使用LocalOffsetY、LocalOffsetZ、GlobalOffsetY以及GlobalOffsetZ属性制作出自己的3D动画。
Windows Store App 偏移特效的更多相关文章
- Windows Store App 旋转特效
使用Projection类可以实现界面元素的三维效果,它可以使界面上的元素在三维空间中沿着X轴.Y轴或者Z轴旋转一定的角度,在透视转换中此类又称为元素的Projection属性,用于对元素使用3D特效 ...
- Windows Store App 变形特效
在应用程序的开发过程中,为了让界面按照期望的效果显示,有时会对界面元素应用变形特效,例如图片的缩放.旋转.移动等.与3D特效不同,在界面元素实现变形特效之后,其平行关系不会发生改变,只不过是位置.大小 ...
- 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)
这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...
- Windows Store App 过渡动画
Windows Store App 过渡动画 在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...
- Windows store app[Part 4]:深入WinRT的异步机制
接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...
- Windows store app[Part 3]:认识WinRT的异步机制
WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...
- 05、Windows Store app 的图片裁切(更新)
在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...
- 01、Windows Store APP 设置页面横竖屏的方法
在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...
- Windows store app[Part 1]:读取U盘数据
Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...
随机推荐
- c#大文件分割过程
需求: 在项目开发中,我们会遇到单个文件大小超过1TB的文件,这样的文件只能进行单文件读取,往往会造成读取完成耗时过长,导致客户在使用体验过程中不满意. 为了解决提升大文件的解析速度,我想到了先分割大 ...
- 使用Go开发HTTP中间件
原文地址 再web开发的背景下,"中间件"通常意思是"包装原始应用并添加一些额外的功能的应用的一部分".这个概念似乎总是不被人理解,但是我认为中间件非常棒 ...
- Boost源码剖析之:泛型指针类any
C++是强类型语言,所有强类型语言对型别的要求都是苛刻的,型别一有不合编译器就会抱怨说不能将某某型别转换为某某型别,当然如果在型别之间提供了转换操作符或是标准所允许的一定程度的隐式转换(如经过非exp ...
- android opengl
引用:http://weimingtom.iteye.com/blog/1616972 二维坐标系变换为原点在左上角(测试用) * GLES * JOGL * LWJGL * libgdx(使用g2d ...
- 【C解毒】怎样写main()函数
[C解毒]怎样写main()函数(出处: CUNIX论坛)
- Java 可变参数列表
1.可变参数列表的简单实现 当调用方法时,方法的参数个数或类型未知时,称其为可变参数列表.在以前的Java代码中,可以使用Object数组来实现这样的功能.因为,所有的类都是直接或间接继承于Objec ...
- 一面cvte
昨天上午去cvte参加一面,和好基友一块,离学校很近,10点多一点到了,一出电梯,傻眼了(不是美女很多),是人真的很多,等了2个小时才轮到我们,一个hr面3个人,我和基友,还有一个本科小盆友,问了5个 ...
- Jquery 处理字符串
1.去掉空格var txt=$.trim($("txt1").val()); 2.转为数字 txtNum=Number($.trim(txt)) + 1; var thisEle ...
- objective C 学习之02
1. 函数 -(void) HelloWorld:(BOOL)ishelloworld{ //干点啥 } 前面带有减号(-) 的方法为实例方法,必须使用类的实例才可以调用的.对应的有+号, 代表是类的 ...
- java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO)
在更新项目之后,做了一定的改动后发现竟然报错了,刚才还好好的. java.sql.SQLException: Access denied for user 'root'@'localhost' (us ...