插值动画支持DoubleAnimation、ColorAnimation和PointAnimation类型的动画。其中比较常用的是DoubleAnimation动画,它可以用来控制界面元素的Double类型属性值的动态变化,从而使元素在界面上呈现我们期望的动画效果。ColorAnimation和PointAnimation动画与DoubleAnimation动画类似,通过改变元素的Color类型和Point类型的属性值就可以实现这两种动画。下面首先介绍一下上述动画对象的一些共有属性。

q  Duration,指定一次完整的动画周期,Duration 属性值的格式是“小时:分钟:秒”。

q  AutoReverse,指定时间线在达到Duration属性指定的终点后是否倒退。如果将此动画属性设置为True,动画会从终止状态向起始状态反向播放。

q  RepeatBehavior,指定动画的播放次数,如果该属性值为Forever,说明动画从一开始时就无限次重复地播放。

接下来以DoubleAnimation动画为例,通过改变椭圆的不透明度产生亮暗交替变换的动画效果。

在一个打开的Windows 应用商店项目中新建一个空白页,并命名为DoubleAnimationPage,双击打开此页面的DoubleAnimationPage.xaml文件,在原有的Grid元素中添加如下代码。

<StackPanel>

    <StackPanel.Resources>

        <Storyboard  x:Name="storyboard">

            <DoubleAnimation

                Storyboard.TargetProperty="Opacity"

                Storyboard.TargetName="ellipse"

                From="1"

                To="0"

                AutoReverse="True"

                RepeatBehavior="Forever"

                Duration="0:0:2">

            </DoubleAnimation>

        </Storyboard>

    </StackPanel.Resources>

</StackPanel>

<Ellipse x:Name="ellipse" Fill="White"

PointerPressed="Animation_Begin" Height="200" Width="300" Margin="200,100,200,100"/>        

以上代码在StackPanel元素的资源字典StackPanel.Resources中添加一个作为动画资源的Storyboard元素,并命名为storyboard,以便在后台文件中调用storyboard对象的Begin方法启动动画。然后在Storyboard 元素中添加一个DoubleAnimation动画,并设置DoubleAnimation动画控制的属性为Opacity。接着设置From属性的值为1、To属性的值为0,表示Opacity属性的值会从1变到0,即产生由亮变暗的动画效果。然后分别设置动画对象DoubleAnimation的AutoReverse和RepeatBehavior属性值为True和Forever,这样动画就可以无限次的正反交替播放。完成了Storyboard元素相关属性的设置之后,下面继续在原有的Grid元素中添加一个名为“ellipse”的Ellipse元素作为动画目标,为Ellipse元素的PointerPressed事件定义一个名为“Animation_Begin”的事件处理方法,当触发此事件时将动画启动。最后设置Storyboard元素的TargetName属性值为ellipse,将动画效果定位到Ellipse元素上。

接下来在后台代码中添加Animation_Begin事件处理方法,代码如下所示:

private void Animation_Begin (Object sender, PointerRoutedEventArgs e)

{

      storyboard.Begin();

}

        Animation_Begin方法中的代码很简单,只需调用storyboard对象的Begin方法就能够启动动画。

运行此页面,单击屏幕中的椭圆会触发其事件处理方法,可以看到椭圆产生了亮暗交替变换的动画效果,如图10-5所示。

图10-5 椭圆控件亮暗交替变换动画效果图

从图10-5中可以看到,椭圆最初处于最亮状态,动画开始时,它会逐渐变暗,直到彻底看不见,然后椭圆还会以相反方向进行亮暗变化,这样就实现了椭圆亮暗交替变化的动画效果。

在上面的示例中读者已经知道如果要对演示图板动画加以控制,需要在后台文件中添加相应的事件处理方法。例如可以调用Storyboard对象的Begin方法可以启动动画,除此之外还可以调用Storyboard对象的Pause 、Resume 和Stop方法来控制动画的暂停、恢复和停止。

值得注意的是,如果产生的动画效果影响了界面的布局,例如改变了元素的宽度、高度或者改变了元素在界面中的位置,此时要将动画对象的EnableDependentAnimation属性值设置为True,这样才能确保动画能正常播放。下面针对这种情况,为椭圆添加一个PointAnimation动画使界面中的椭圆实现位置移动的动画效果。

在一个打开的Windows 应用商店项目中新建一个空白页,并命名为PointAnimationPage。

双击打开此页面的PointAnimationPage.xaml文件,在Grid原有的元素中添加如下代码。

<Canvas>

    <Canvas.Resources>

        <Storyboard  x:Name="storyboard">

            <PointAnimation

                EnableDependentAnimation="True"

               Storyboard.TargetProperty="Center"

                Storyboard.TargetName="AnimatedEllipseGeometry"

                Duration="0:0:5"

                From="30,400"

                To="400,0"

                RepeatBehavior="Forever"/>

        </Storyboard >

    </Canvas.Resources>

</Canvas>

<Path Fill="Red">

    <Path.Data>

        <!--显示一个椭圆,中心点是(20,20),横半轴为15,纵半轴为15 -->

        <EllipseGeometry x:Name="AnimatedEllipseGeometry"

Center="30,400" RadiusX="30" RadiusY="30"/>

    </Path.Data>

</Path>

<StackPanel Orientation="Horizontal" Canvas.Left="10" Canvas.Top="265">

    <!--启动动画的按钮 -->

    <Button Click="Animation_Begin" Width="80" Height="40" Margin="2" Content="开始动画"/>

    <!--暂停动画的按钮-->

    <Button Click="Animation_Pause" Width="80" Height="40" Margin="2" Content="暂停动画"/>

    <!--恢复动画的按钮-->

    <Button Click="Animation_Resume" Width="80" Height="40" Margin="2" Content="恢复动画"/>

    <!--终止动画的按钮 -->

    <Button Click="Animation_Stop" Width="80" Height="40" Margin="2" Content="终止动画"/>

</StackPanel>

上面的代码首先在Canvas元素的资源字典Canvas.Resources中添加一个作为动画资源的Storyboard元素,并命名为storyboard,以便在后台PointAnimationPage.xaml.cs文件中通过Storyboard对象的相关方法来对动画效果进行控制。接着在Storyboard 元素中添加一个PointAnimation动画,并设置PointAnimation动画控制的属性为Center,定义From属性的值为坐标点(30,400)、To属性的值为坐标点(400,0),表示中心点Center的值会从坐标点(30,400)过渡到坐标点(400,0)。然后又添加了一个与Canvas元素同级的Path元素,同时在Path.Data元素中添加一个名为“AnimatedEllipseGeometry”的EllipseGeometry元素作为动画目标。并设置EllipseGeometry元素的Center属性值为坐标点(20,20),从而确定EllipseGeometry元素的位置,定义RadiusX、RadiusY属性值分别为30像素以指定此元素的大小。接着设置Storyboard元素的TargetName属性值为AnimatedEllipseGeometry,将动画效果定位到EllipseGeometry元素上。最后在Grid元素中添加一个StackPanel元素,其中含有4个按钮,并且每个按钮都定义了用于启动、暂停、恢复和停止动画的单击事件,以便控制的动画的播放状态。

接下来打开PointAnimationPage.xaml.cs文件,为这4个控制动画播放的按钮添加事件处理方法,代码如下所示:

private void Animation_Begin(object sender, RoutedEventArgs e)

{

    storyboard.Begin();

}

private void Animation_Pause(object sender, RoutedEventArgs e)

{

    storyboard.Pause();

}

private void Animation_Resume(object sender, RoutedEventArgs e)

{

    storyboard.Resume();

}

private void Animation_Stop(object sender, RoutedEventArgs e)

{

    storyboard.Stop();

}

上面的代码通过调用storyboard对象的Begin、Pause、Resume和Stop方法,即可实现对动画的播放控制。

运行此页面,单击开始动画、暂停动画、恢复动画、终止动画按钮会触发相应的事件处理方法,从而对椭圆的移动进行控制,动画效果如图10-6所示。

图10-6  PointAnimation动画

从图10-6中可以看到,当单击开始动画按钮时,椭圆会从图左下方的位置沿着固定的坐标向右上方移动。在此示例中,椭圆的起始位置坐标是(30,400),结束位置坐标是(400,0),这说明椭圆向右移动了370像素,向上移动了400像素。

以上示例通过改变EllipseGeometry元素的Center属性值使界面中的椭圆以固定的轨迹进行运动。除此之外,EllipseGeometry元素还有RadiusX和RadiusY两个属性,分别代表椭圆的横半轴和纵半轴,我们还可以在演示图板中添加两个DoubleAnimation动画分别用来控制RadiusX和RadiusY属性值,这样即可实现椭圆放大或者缩小的动画效果。

Windows Store App 插值动画的更多相关文章

  1. Windows Store App 过渡动画

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

  2. Windows Store App 关键帧动画

    关键帧动画和插值动画类似,同样可以根据目标属性值的变化产生相应的动画效果,不同的是,插值动画是在两个属性值之间进行渐变,而关键帧动画打破了仅通过两个属性值控制动画的局限性,它可以在任意多个属性值之间进 ...

  3. Windows Store App 主题动画

    Windows 8系统的动画库中包含了丰富的主题动画,在开发Windows应用商店应用时,使用主题动画编写较少的代码即可实现所期望的动画效果.下面介绍一些常用的主题动画,读者可以根据每种主题动画提供的 ...

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

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

  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. linux--------wdcp中的各种坑。

    1.刚买的空间客服给安装了wdcplinux,结果上去一看PHP是5.2版本的,这不是搞笑嘛.然后就有了下面的升级: 复制这条命令回车然后敲Y就可以: wget http://soft.itbulu. ...

  2. shell脚本中切换用户执行相应的命令或者shell脚本的方法

    通常在执行自动化过程中可能需要将root用户切换到其他用户进行执行,如:oralce 但是,执行的命令又要回到root用户下,继续执行root用户下的其他命令. 此时需要了解 su 命令中的参数 -c ...

  3. MVC:从客户端中检测到有潜在危险的 Request.Form 值 的解决方法

    从客户端(Content="<EM ><STRONG ><U >这是测试这...")中检测到有潜在危险的Request.Form 值. 说明:  ...

  4. 最长公共子序列(加强版) Hdu 1503 Advanced Fruits

    Advanced Fruits Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  5. Normalize.css 与 reset.css

    Normalize.css 与 reset.css都是初始化页面样式 不同点在于 reset.css更加粗暴,直接把所有的样式全部初始化了: Normalize.css还剩点良心,还保留了一些浏览器默 ...

  6. POJ - 1978 Hanafuda Shuffle

    最初给牌编号时,编号的顺序是从下到上:洗牌时,认牌的顺序是从上到下.注意使用循环是尽量统一“i”的初始化值,都为“0”或者都为“1”,限界条件统一使用“<”或者“<=”. POJ - 19 ...

  7. notepad++代码自动补全功能

    可以代码自动补全功能,默认他是没有开启这个功能的,在首选项->备份与自动完成 里面有自动完成这一个设置,可以设置单词补全,也可以设置函数补全,这样写代码就快多了

  8. oracle 卸载

    由于工作需要,重装了一下Oracle,然后发现同SQLServer,MySQL等数据库相比,Oracle的卸载重装真是不一般的麻烦.     整理了一下我的Oracle的卸载重装过程,给自己备忘,同时 ...

  9. PHP 用户登录与退出

    PHP 用户登录与退出 登录页面 login.html 负责收集用户填写的登录信息. <fieldset> <legend>用户登录</legend> <fo ...

  10. Nginx模块之————RTMP模块在Ubuntu上以串流直播HLS视频

    Nginx的安装在Ubuntu上以串流直播HLS视频 https://www.vultr.com/docs/setup-nginx-on-ubuntu-to-stream-live-hls-video