zoukankan      html  css  js  c++  java
  • Windows Store App 插值动画

    插值动画支持DoubleAnimationColorAnimationPointAnimation类型的动画。其中比较常用的是DoubleAnimation动画,它可以用来控制界面元素的Double类型属性值的动态变化,从而使元素在界面上呈现我们期望的动画效果。ColorAnimationPointAnimation动画与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属性的值为1To属性的值为0,表示Opacity属性的值会从1变到0,即产生由亮变暗的动画效果。然后分别设置动画对象DoubleAnimationAutoReverseRepeatBehavior属性值为TrueForever,这样动画就可以无限次的正反交替播放。完成了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>

            <!--显示一个椭圆,中心点是(2020),横半轴为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属性的值为坐标点(30400)、To属性的值为坐标点(4000),表示中心点Center的值会从坐标点(30400)过渡到坐标点(4000)。然后又添加了一个与Canvas元素同级的Path元素,同时在Path.Data元素中添加一个名为“AnimatedEllipseGeometry”的EllipseGeometry元素作为动画目标。并设置EllipseGeometry元素的Center属性值为坐标点(20,20),从而确定EllipseGeometry元素的位置,定义RadiusXRadiusY属性值分别为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对象的BeginPauseResumeStop方法,即可实现对动画的播放控制。

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

    10-6  PointAnimation动画

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

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

  • 相关阅读:
    Version
    Windows Server Protocols (WSPP)
    Tomcat启动问题jvm访问拒绝的解决方法
    vue3中使用draggable插件实现元素的拖拽,排序,克隆
    消息队列的思考
    jenkins_ssh
    jenkins_构建配置
    minikube清理sh
    stream源码导读
    源码rabbit_3_消息链路追踪
  • 原文地址:https://www.cnblogs.com/finehappy/p/4218555.html
Copyright © 2011-2022 走看看