通过前面讲解的内容,读者已经了解了如何在三维空间中使旋转对象绕指定的旋转中心旋转一定的角度。接下来在这个基础上进一步讲解如何对旋转对象进行平移。下面首先介绍一下用到的几个属性。

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,代码如下所示:

private voidStartAnimation_Click (object sender, RoutedEventArgs e)

   {

  storyboard.Begin();

}

以上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 偏移特效的更多相关文章

  1. Windows Store App 旋转特效

    使用Projection类可以实现界面元素的三维效果,它可以使界面上的元素在三维空间中沿着X轴.Y轴或者Z轴旋转一定的角度,在透视转换中此类又称为元素的Projection属性,用于对元素使用3D特效 ...

  2. Windows Store App 变形特效

    在应用程序的开发过程中,为了让界面按照期望的效果显示,有时会对界面元素应用变形特效,例如图片的缩放.旋转.移动等.与3D特效不同,在界面元素实现变形特效之后,其平行关系不会发生改变,只不过是位置.大小 ...

  3. 在桌面程序上和Metro/Modern/Windows store app的交互(相互打开,配置读取)

    这个标题真是取得我都觉得蛋疼..微软改名狂魔搞得我都不知道要叫哪个好.. 这边记录一下自己的桌面程序跟windows store app交互的过程. 由于某些原因,微软的商店应用的安全沙箱导致很多事情 ...

  4. Windows Store App 过渡动画

    Windows Store App 过渡动画     在开发Windows应用商店应用程序时,如果希望界面元素进入或者离开屏幕时显得自然和流畅,可以为其添加过渡动画.过渡动画能够及时地提示用户屏幕所发 ...

  5. Windows store app[Part 4]:深入WinRT的异步机制

    接上篇Windows store app[Part 3]:认识WinRT的异步机制 WinRT异步机制回顾: IAsyncInfo接口:WinRT下异步功能的核心,该接口提供所有异步操作的基本功能,如 ...

  6. Windows store app[Part 3]:认识WinRT的异步机制

    WinRT异步机制的诞生背景 当编写一个触控应用程序时,执行一个耗时函数,并通知UI更新,我们希望所有的交互过程都可以做出快速的反应.流畅的操作感变的十分重要. 在连接外部程序接口获取数据,操作本地数 ...

  7. 05、Windows Store app 的图片裁切(更新)

    在 Win Phone Silverlight api 中,有一个 PhotoChooserTask 选择器,指定宽.高属性,在选择图片的时候, 可以进行裁切,代码: PhotoChooserTask ...

  8. 01、Windows Store APP 设置页面横竖屏的方法

    在 windows phone store app 中,判断和设置页面横竖屏的方法,与 silverlight 中的 Page 类 不同,不能直接通过 Page.Orientation 进行设置.而是 ...

  9. Windows store app[Part 1]:读取U盘数据

    Windows 8系统下开发App程序,对于.NET程序员来说,需要重新熟悉下类库. 关于WinRT,引用一张网上传的很多的结构图: 图1 针对App的开发,App工作在系统划定的安全沙箱内,所以通过 ...

随机推荐

  1. For,Function,Lazy

    package com.dtgroup.study import scala.io.Source object ForFunctionLazy { def main(args: Array[Strin ...

  2. 创建XMLHttpRequest对象方法

    ~~~ //创建XMLHttpRequest对象 function creatXmlHttpRequest() { var xmlHttp; try{ //非IE浏览器使用 xmlHttp = new ...

  3. AJAX-----15HTML5实现进度条上传

    目的当然还是为了提高用户的体验度嘛,, 废话不多说走码.... <!DOCTYPE html> <html lang="en"> <head> ...

  4. [tp3.2.1]查询(2)

    <?php namespace Home\Controller; use Think\Controller; use Think\Model; class QueryController ext ...

  5. 【数论】Miller_Rabin

    Miller_Rabin素数测试     Miller_Rabin判断单个素数的方法运用了费马小定理,可以说非常之快了.     Miller_Rabin曾经被称作“黑科技”,但是根据费马小定理其实完 ...

  6. 高DPI设置时禁用显示的方法

    在注册表 [HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows NT\CurrentVersion\AppCompatFlags\Layers] 中添加exe的完 ...

  7. Spring aop报错:com.sun.proxy.$Proxy cannot be cast to xxx

    准备使用AOP记录所有NamedParameterJdbcTemplate操作数据时的所有日志,没想到出现这个错误,折腾了好久,终于找出原因 解决方案:在 aop-config配置添加上: proxy ...

  8. 随机获取数据库中的某一条数据(基于yii2框架开发)

    注意: 使用PHP函数array_rand()得到的是这个数组中的那个值相对应的下标键值,需要配合原来的数组进行,例如: $rand_keys = array_rand($ids,1); $id = ...

  9. [JavaScript]JavaScript处理iframe的动作

    随着W3C一声令下,几年前使用非常频繁的frameset + frame已完成使命,光荣退伍.作为frameset的替代方案(姑且这么称吧),iframe的使用也多了起来.较frameset方案,if ...

  10. TCP状态转移图学习总结

    http://blog.csdn.net/hairetz/article/details/6221620 这是网络编程的基础,tcp的状态转移图说到底就是一个状态机的不同状态之间的转换关系以及触发这些 ...