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工作在系统划定的安全沙箱内,所以通过 ...
随机推荐
- PRML读书笔记——2 Probability Distributions
2.1. Binary Variables 1. Bernoulli distribution, p(x = 1|µ) = µ 2.Binomial distribution + 3.beta dis ...
- Zju1015 Fishing Net
弦图判定 代码 #include<cstdio> #include<queue> #define mp make_pair #define fi first #define s ...
- Notepad++的列编辑功能
转自:http://www.crifan.com/files/doc/docbook/rec_soft_npp/release/htmls/index.html http://www.crifan.c ...
- POJ 2195:Going Home(最小费用最大流)
http://poj.org/problem?id=2195 题意:有一个地图里面有N个人和N个家,每走一格的花费是1,问让这N个人分别到这N个家的最小花费是多少. 思路:通过这个题目学了最小费用最大 ...
- java list倒序输出及复制list集合
如原来有一个集合list,list里面是有数据的,现在如果把list中的集合倒序过来,加这代码 Collections.reverse(list);此代码中传入原来的list数据 有这代码后list在 ...
- noi 4982 踩方格
题目链接:http://noi.openjudge.cn/ch0206/4982/ 深搜很好写. DP:O(n) d[i] 为走 I 不的方案数, l[i],r[i],u[i]为第一步走 左,右,上, ...
- Android study first ----------安卓项目目录结构及adb指令
#Android项目的目录结构 * Activity:应用被打开时显示的界面 * src:项目代码 * R.java:项目中所有资源文件的资源id * Android.jar:Android的jar包 ...
- 【前端】String.prototype.match() 用法详解
var str="1 plus 2 equal 3" // 正则表达式 console.log(str.match(/\d+/g)); // ["1", &qu ...
- 【双标记线段树】bzoj1798维护序列seq
一.题目 描述 老师交给小可可一个维护数列的任务,现在小可可希望你来帮他完成. 有长为N的数列,不妨设为a1,a2,-,aN .有如下三种操作形式: (1)把数列中的一段数全部乘一个值; (2)把数列 ...
- 8-JS闭包、回调实例
1.回调 javascipt中,函数回调一般用于以下几种场景: 1.异步执行(例如读取文件,进行HTTP请求) 2.同步(阻塞) 3.事件监听和处理 4.设置超时和时间间隔的方法 异步例子(使用AJA ...