Windows Phone开发(40):漫谈关键帧动画之中篇

简介: 原文: Windows Phone开发(40):漫谈关键帧动画之中篇 一、DiscreteDoubleKeyFrame 离散型关键帧动画,重点,我们理解一下“离散”的意思,其实你查一下《新华字典》,“离”和“散”的意思相近。
原文: Windows Phone开发(40):漫谈关键帧动画之中篇

一、DiscreteDoubleKeyFrame

离散型关键帧动画,重点,我们理解一下“离散”的意思,其实你查一下《新华字典》,“离”和“散”的意思相近。我们可以这样解释:每个关键帧之间是直接过渡,其间不经过动画插补。似乎这样理解有点苦涩难懂,所以,我们还是从实例入手。

请参考以下XAML代码写一个示例:

    <Grid Loaded="OnGridLoaded">
        <Rectangle Width="100" Height="100" Fill="Green" VerticalAlignment="Top">
            <Rectangle.RenderTransform>
                <TranslateTransform x:Name="trm"/>
            </Rectangle.RenderTransform>
        </Rectangle>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <DoubleAnimationUsingKeyFrames Duration="0:0:5" RepeatBehavior="15"
                                               Storyboard.TargetName="trm"
                                               Storyboard.TargetProperty="Y">
                    <DiscreteDoubleKeyFrame KeyTime="0:0:2" Value="150"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:3" Value="280"/>
                    <DiscreteDoubleKeyFrame KeyTime="0:0:5" Value="380"/>
                </DoubleAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>

在后台的C#代码中,千万不要记了启动动画,等下运行后发现动不了就麻烦了。


        private void OnGridLoaded(object sender, RoutedEventArgs e)
        {
            this.std.Begin();
        }


 然后你可以运行了,注意认真观察动画的演变过程。

 

不知道你观察到了什么?你是否发现,矩形向下运动的过程是直接跳跃式的,每个关键之间没有创建过渡效果,而且直接跳到对应值。

 

 

二、DiscreteColorKeyFrame

这也是一个离散型关键帧动画,从名字上我们知道,它是针对颜色进行动画处理的。还是看例子吧。

请参考下面XAML代码写一个测试程序:

    <Grid Loaded="OnGridLoaded">
        <Ellipse Width="250" Height="250">
            <Ellipse.Fill>
                <SolidColorBrush x:Name="brush" Color="Blue"/>
            </Ellipse.Fill>
        </Ellipse>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <ColorAnimationUsingKeyFrames Duration="0:0:8"
                                              RepeatBehavior="20"
                                              Storyboard.TargetName="brush"
                                              Storyboard.TargetProperty="Color">
                    <DiscreteColorKeyFrame KeyTime="0:0:2" Value="Yellow"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:5" Value="Gray"/>
                    <DiscreteColorKeyFrame KeyTime="0:0:7" Value="Red"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>


后台代码就不帖了,都懂得写什么了。

然后运行一下,查看效果。

 

从效果中可以看到,颜色的改变是没有平滑的过渡效果的,而是当时间线的播放时间到了关键帧所在的位置时,颜色是直接改变的。

 

 

三、LinearColorKeyFrame

线性颜色的关键帧与离散型动画相反,每个关键帧之间都创建平滑的过渡效果,让人看起来有连续感。

请参考以下XAML代码写一个测试程序。

    <Grid Loaded="onGridLoaded">
        <Ellipse Width="300" Height="300" >
            <Ellipse.Fill>
                <RadialGradientBrush x:Name="rdGradientBrush" Center="0.5, 0.5"
                                     RadiusX="0.5" RadiusY="0.5">
                    <GradientStop Color="LightGreen" Offset="0"/>
                    <GradientStop Color="DarkGreen" Offset="1"/>
                </RadialGradientBrush>
            </Ellipse.Fill>
        </Ellipse>
        <Grid.Resources>
            <Storyboard x:Name="std">
                <ColorAnimationUsingKeyFrames Duration="0:0:6"
                                              RepeatBehavior="Forever"
                                              Storyboard.TargetName="rdGradientBrush"
                                              Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[0].(GradientStop.Color)">
                    <LinearColorKeyFrame KeyTime="0:0:1" Value="Orange"/>
                    <LinearColorKeyFrame KeyTime="0:0:3" Value="White"/>
                    <LinearColorKeyFrame KeyTime="0:0:6" Value="Pink"/>
                </ColorAnimationUsingKeyFrames>
                <ColorAnimationUsingKeyFrames Duration="0:0:6"
                                              RepeatBehavior="Forever"
                                              Storyboard.TargetName="rdGradientBrush"
                                              Storyboard.TargetProperty="(RadialGradientBrush.GradientStops)[1].(GradientStop.Color)">
                    <LinearColorKeyFrame KeyTime="0:0:3" Value="Yellow"/>
                    <LinearColorKeyFrame KeyTime="0:0:6" Value="Violet"/>
                    <LinearColorKeyFrame KeyTime="0:0:7" Value="SeaGreen"/>
                </ColorAnimationUsingKeyFrames>
            </Storyboard>
        </Grid.Resources>
    </Grid>


页面上的正圆是使用径向渐变填充的,渐变颜色点有两个,我们分别对这两个渐变点的颜色进行线性动画处理,这样就会做出很漂亮的效果,如下面图片所示。

          

目录
相关文章
|
IDE 关系型数据库 开发工具
使用Visual Basic进行Windows窗体开发
【4月更文挑战第27天】本文介绍了使用Visual Basic进行Windows窗体(WinForms)开发的步骤,从搭建开发环境到创建、设计用户界面,再到编写事件驱动的代码和数据绑定。Visual Basic结合WinForms提供了一种易学易用的桌面应用开发方案。通过调试、优化、部署和维护,开发者可以构建专业应用程序。随着技术发展,掌握最新UI设计和开发工具对于保持竞争力至关重要。本文为初学者提供了基础指导,鼓励进一步探索和学习。
584 0
|
Ubuntu Linux Python
如何利用wsl-Ubuntu里conda用来给Windows的PyCharm开发
如何在WSL(Windows Subsystem for Linux)的Ubuntu环境中使用conda虚拟环境来为Windows上的PyCharm开发设置Python解释器。
2419 1
|
Linux Apache C++
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
该文介绍了如何在Windows环境下为FFmpeg集成SRT协议支持库libsrt。首先,需要安装Perl和Nasm,然后编译OpenSSL。接着,下载libsrt源码并使用CMake配置,生成VS工程并编译生成srt.dll和srt.lib。最后,将编译出的库文件和头文件按照特定目录结构放置,并更新环境变量,重新配置启用libsrt的FFmpeg并进行编译安装。该过程有助于优化直播推流的性能,减少卡顿问题。
605 2
FFmpeg开发笔记(三十五)Windows环境给FFmpeg集成libsrt
|
监控 关系型数据库 MySQL
PowerShell 脚本编写 :自动化Windows 开发工作流程
PowerShell 脚本编写 :自动化Windows 开发工作流程
679 0
|
算法 Linux Windows
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
在Windows环境下为FFmpeg集成字幕渲染库libass涉及多个步骤,包括安装freetype、libxml2、gperf、fontconfig、fribidi、harfbuzz和libass。每个库的安装都需要下载源码、配置、编译和安装,并更新PKG_CONFIG_PATH环境变量。最后,重新配置并编译FFmpeg以启用libass及相关依赖。完成上述步骤后,通过`ffmpeg -version`确认libass已成功集成。
865 1
FFmpeg开发笔记(十七)Windows环境给FFmpeg集成字幕库libass
|
存储 安全 程序员
Windows任务管理器开发原理与实现
Windows任务管理器开发原理与实现
|
编解码 Linux Windows
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
在Windows环境下,为FFmpeg集成音频编解码库,包括libogg、libvorbis和opencore-amr,涉及下载源码、配置、编译和安装步骤。首先,安装libogg,通过配置、make和make install命令完成,并更新PKG_CONFIG_PATH。接着,安装libvorbis,同样配置、编译和安装,并修改pkgconfig文件。之后,安装opencore-amr。最后,重新配置并编译FFmpeg,启用ogg和amr支持,通过ffmpeg -version检查是否成功。整个过程需确保环境变量设置正确,并根据路径添加相应库。
590 1
FFmpeg开发笔记(十一)Windows环境给FFmpeg集成vorbis和amr
|
Linux 编译器 C语言
FFmpeg开发笔记(二)搭建Windows系统的开发环境
在Windows上学习FFmpeg通常较困难,但通过安装预编译的FFmpeg开发包可以简化流程。首先需要安装MSYS2来模拟Linux环境。下载并执行MSYS2安装包,然后修改msys2_shell.cmd以继承Windows的Path变量。使用pacman安装必要的编译工具。接着,下载预编译的FFmpeg Windows包,解压并配置系统Path。最后,在MSYS2环境中运行`ffmpeg -version`确认安装成功。欲深入学习FFmpeg开发,推荐阅读《FFmpeg开发实战:从零基础到短视频上线》。
626 4
FFmpeg开发笔记(二)搭建Windows系统的开发环境
|
网络安全 C++ Windows
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
【Windows驱动开发】(主机)VS2017+(虚拟机)win10系统------双机调试
|
开发者 C# Windows
WPF与游戏开发:当桌面应用遇见游戏梦想——利用Windows Presentation Foundation打造属于你的2D游戏世界,从环境搭建到代码实践全面解析新兴开发路径
【8月更文挑战第31天】随着游戏开发技术的进步,WPF作为.NET Framework的一部分,凭借其图形渲染能力和灵活的UI设计,成为桌面游戏开发的新选择。本文通过技术综述和示例代码,介绍如何利用WPF进行游戏开发。首先确保安装最新版Visual Studio并创建WPF项目。接着,通过XAML设计游戏界面,并在C#中实现游戏逻辑,如玩家控制和障碍物碰撞检测。示例展示了创建基本2D游戏的过程,包括角色移动和碰撞处理。通过本文,WPF开发者可更好地理解并应用游戏开发技术,创造吸引人的桌面游戏。
972 0