使用Projection类可以实现界面元素的三维效果,它可以使界面上的元素在三维空间中沿着X轴、Y轴或者Z轴旋转一定的角度,在透视转换中此类又称为元素的Projection属性,用于对元素使用3D特效,Projection属性中包含一个PlaneProjection元素,用于声明3D特效,即声明元素在三维空间中的呈现方式。下面通过一个示例演示3D特效带来的视觉体验。

启动Visual Studio 2012,新建一个Windows应用商店的空白应用程序项目,将其命名为3DAnimationApp。本示例通过对Grid元素添加透视转换使界面产生三维效果。在项目的Assets文件夹下添加一个名为“Windows 8.png”的图片文件,接着打开MainPage.xaml文件,使用如下代码替换原有的Grid元素。

<Grid Margin="260,10,100,60" Background="Gray" Width="600" Height="400">

    <Grid.Projection>

        <PlaneProjection RotationX="10" RotationY="-25" RotationZ="10"/>

    </Grid.Projection>

    <TextBlock Margin="110,20" FontSize="30">界面的三维效果展示</TextBlock>            

    <Image Source="Assets/Windows 8.png" Width="300" Height="300" Margin="98,59,202,41"/>

</Grid>

以上代码在Grid.Projection元素中添加一个PlaneProjection元素,以定义其透视转换的呈现方式。然后在PlaneProjection元素中分别设置RotationX、RotationY和RotationZ属性的值使界面元素按照一定的角度旋转。最后在Grid元素中添加一个TextBlock元素和一个Image元素,并指定TextBlock元素的静态文本内容为“界面的三维效果展示”,同时设置Image元素的Source属性值为刚刚在项目中添加的图片资源路径“Assets/Windows 8.png”,将其宽度和高度分别设置为300像素。

至此已经设计好了前台界面的布局并为父级元素Grid添加了透视转换,这样Grid元素内的所有子元素都可以产生三维效果。按下F5运行程序,界面效果如图10-8所示。

图10-8 界面元素的三维效果

通过以上示例读者已经对透视转换有了初步的了解,需要注意的是,PlaneProjection元素中包含的RotationX、RotationY和RotationZ属性分别代表在三维空间中沿X轴、Y轴和Z轴旋转的角度,它们不同于普通的二维坐标,二维坐标是一个平面,而三维坐标是一个立体的空间。并且PlaneProjection元素决定了透视转换将会产生怎样的三维特效。下面以RotationX属性为例,在此基础之上将3D特效与演示图板动画结合使用,实现更加引人关注的3D动画效果。

启动Visual Studio 2012,新建一个Windows应用商店的空白应用程序项目,将其命名为3DRotationAnimation。本示例将3D特效与演示图板动画结合使用,通过控制PlaneProjection元素的RotationX属性值,界面中的图片将会在三维立体空间中沿X轴不停的旋转。在项目的Assets文件夹下添加1个名为“Windows 8.png”的图片,打开MainPage.xaml文件,使用如下代码替换原有的Grid元素。

<Grid Background="Gray">

    <StackPanel Width="260" Height="240" Background="White">

        <!--对图片进行透视转换-->

        <Image Source="/Assets/Windows 8.png" Width="260" Height="240" PointerPressed="RotationX_Click">

            <Image.Projection>

                <PlaneProjection x:Name="PlaneProjectionRotation" />

            </Image.Projection>

        </Image>

        <StackPanel.Resources >

            <Storyboard x:Name="storyboard">

                <!--此动画控制PlaneProjection元素的RotationX属性值,使图片旋转360度-->

                <DoubleAnimation Duration="0:0:4"                         Storyboard.TargetName="PlaneProjectionRotation"              

                    Storyboard.TargetProperty="RotationX"

                    From="0"

                    To="360"  

                    RepeatBehavior="Forever"/>

            </Storyboard>

        </StackPanel.Resources>       

    </StackPanel>

</Grid>

以上代码在StackPanel元素中添加了一个Image元素,设置Image元素的Source属性值为图片资源路径“/Assets/Flower.png”,并为此元素的PointerPressed事件定义名为“RotationX_Click”的事件处理方法,用于控制动画的播放。接着在Image.Projection元素中添加一个名为“PlaneProjectionRotation”的PlaneProjection元素,PlaneProjection元素可以定义图片通过透视转换后在界面中呈现的方式。然后在StackPanel元素的资源字典StackPanel.Resources中添加一个作为动画资源的Storyboard元素,并命名为storyboard,以便在后台文件中调用storyboard对象的Begin方法启动动画。Storyboard 元素中添加了一个DoubleAnimation动画,用于将图片的3D特效与演示图板动画结合使用,同时指定Storyboard元素的TargetName和TargetProperty属性值分别为PlaneProjectionRotation和RotationX,这样就可以对PlaneProjection元素的RotationX属性的值进行动画控制。为了调节图片旋转速度,还需要通过设置Duration属性值来指定动画周期,动画周期越小图片的旋转速度就越快,示例中将动画周期设置为4秒,RepeatBehavior属性值设置为Forever,动画将会以恒定的速度一直循环播放。

接下来打开MainPage.xaml.cs文件,为PointerPressed事件添加事件处理方法RotationX_Click,当单击图片时,会触发此事件处理方法,方法中通过调用storyboard对象的Begin方法来启动动画,代码如下所示:

上面的示例代码使用DoubleAnimation动画对PlaneProjection元素的RotationX属性值进行动画控制,图片会沿X轴不停的旋转。除此之外,还可以对RotationY和RotationZ属性值进行控制,这两个属性分别定义沿Y轴和Z轴旋转的角度,因此只需将代码中的RotationX属性替换为RotationY或RotationX属性即可实现沿Y轴或Z轴旋转的3D动画。下面展示了分别沿X轴、Y 轴和Z轴旋转45度的3D动画效果的对比图,如图10-9所示。

图10-9 图片沿X轴、Y轴、Z轴旋转45度的3D动画效果

值得注意的是,能够使图片旋转的属性值可以设置为正数或者负数,正数代表顺时针旋转,负数代表逆时针旋转。图片在X轴、Y轴或Z轴旋转角度的绝对值可以大于360度,这表示图片不只旋转一圈。

Windows Store App 旋转特效的更多相关文章

  1. Windows Store App 偏移特效

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

  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. paper 112:hellinger distance

    在概率论和统计理论中,Hellinger距离被用来度量两个概率分布的相似度.它是f散度的一种(f散度——度量两个概率分布相似度的指标).Hellinger距离被定义成Hellinger积分的形式,这种 ...

  2. FastJSON 之bean列表转换为JSON

    实例 import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSON; public class ...

  3. VS2010 支持 CSS3

    在安装Standards Update for VS2010 SP1后,VS2010中没有CSS3.0问题,以下是我的解决方法 1.首先去官网下载 CSS 3 Intellisense Schema ...

  4. C#随学随记

    1.Microsoft.NET是基于Windows平台的一种技术(简称.NET),它包含了能在.NET Framework平台运行的所有语言..NET Framework是微软为开发应用程序创建的一个 ...

  5. 161216、使用spring的DefaultResourceLoader自定义properties文件加载工具类

    import java.io.IOException; import java.io.InputStream; import java.util.NoSuchElementException; imp ...

  6. php将抓取的图片链接下载到本地

    备注: fclose这一步操作完成之后如果返回值是空表示下载成功,否则会返回1或者其他错误提示 这个步骤测试的时候实在yii2框架的基础上执行的,下载到的图片实在frontend目录下的web目录下( ...

  7. 是否支持css3

    /** * Function to check css3 support * @param {String} declaration name * @return {Boolean} */ funct ...

  8. ASP。net 测验

    Login.aspx using System; using System.Collections.Generic; using System.Linq; using System.Web; usin ...

  9. Java菜鸟培训第二天

    HTML——超文本标记语言…………… 静态网页:不需要访问数据库. 动态网页:在网上发布的好的,我们能通过网络浏览到的都是动态的,需要访问数据库. <html>--开始标签 <hea ...

  10. JS去掉数组的重复项

    自己知道思路怎么去,但是就是自己不会写,在网上找了一些来看,有些还是没有怎么看明白.学习到了这么一种方法 var a=['ss','dd','ss','cc','dd',1,2,1] var b={} ...