iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >WPF实现动画效果(五)之关键帧动画
  • 751
分享到

WPF实现动画效果(五)之关键帧动画

2024-04-02 19:04:59 751人浏览 八月长安
摘要

WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果

WPF动画效果系列

WPF实现动画效果(一)之基本概念

WPF实现动画效果(二)之From/To/By 动画

WPF实现动画效果(三)之时间线(TimeLine)

WPF实现动画效果(四)之缓动函数

WPF实现动画效果(五)之关键帧动画

WPF实现动画效果(六)之路径动画

WPF实现动画效果(七)之演示图板

正文

与 From/To/By 动画类似,关键帧动画以也可以以动画形式显示目标属性值。 和From/To/By 动画不同的是, From/To/By 动画只能控制在两个状态之间变化,而关键帧动画则可以在多个状态之间变化,例如,对于前面那个改变按钮宽度的例子,如果我们要实现如下效果:

  • 在2秒时将宽度从 0变为350

  • 在7秒时将宽度变为50

  • 在9秒的时候将其宽度变为200

虽然我们可以用三个From/To/By 动画组合实现类似效果,但是这样一来麻烦,二来要感知动画完成事件,不方便在XAML中使用。此时我们则可以使用关键帧动画来快速实现这一过程。

    var widthAnimation = new DoubleAnimationUsingKeyFrames();
    var keyFrames = widthAnimation.KeyFrames;

    keyFrames.Add(new LinearDoubleKeyFrame(0, TimeSpan.FromSeconds(0)));
    keyFrames.Add(new LinearDoubleKeyFrame(350, TimeSpan.FromSeconds(2)));
    keyFrames.Add(new LinearDoubleKeyFrame(50, TimeSpan.FromSeconds(7)));
    keyFrames.Add(new LinearDoubleKeyFrame(200, TimeSpan.FromSeconds(9)));

    button.BeginAnimation(WidthProperty, widthAnimation);

可以看出,关键帧动画将每一个状态制定为一个关键帧,关键帧动画时间线自动连接各个关键帧,并计算过渡状态,完成动画。因此,某种程度上,我们也可以把From/To/By 动画看成是只有两个状态的特殊关键帧动画。

内置的关键帧动画

与 From/To/By 动画一样,在名字空间System.windows.Media.Animation 下也内置了大量关键帧动画,它们的命名规则是:    

<类型> AnimationUsingKeyFrames

例如这儿使用的DoubleAnimationUsingKeyFrames,其它类型请参看MSDN:关键帧动画概述,这里就不列举了。

插值算法

在关键帧动画中,我们除了定义关键帧外,还需要定义两个关键帧之间的插值算法,这样系统才能根据关键帧和插值算法生成中间状态。WPF系统内置四种插值算法:

  • 线性:两个关键帧之间均匀变化

  • 离散:两个关键帧之间突变(到达时间点的时候硬切换,没有过渡效果)

  • 样条:使用贝塞尔曲线实现更精确的加速和减速控制

  • 缓动:使用缓动函数曲线实现弹性变化

综上来看,线性算法最常用,样条算法能实现精准加速和减速控制。离散的这种硬切换的效果虽然看起来没有什么动画效果,但用于连接关键帧还是比较常用的。另外在一些硬过渡的地方也是能用到的,例如实现闪烁效果。

这几种算法的具体效果这里就不做更多的介绍了,感兴趣的朋友可以看看如下两个链接中的描述和例子:

  • Http://msdn.microsoft.com/zh-cn/library/ms742524(v=vs.110).aspx

  • http://msdn.microsoft.com/zh-cn/library/System.Windows.Media.Animation.LinearDoubleKeyFrame(v=vs.110).aspx

值得一提的是,并不是所有关键帧动画都支持这几种算法的,具体支持情况请参看MSDN:关键帧动画概述。 当然,对于不支持的也是可以自己手动实现的。

关键帧(IKeyFrame)

前面已经介绍过,一个关键帧主要有时间点和插值算法两部分组成,在WPF中,不同的关键帧动画对应着同的关键帧对象,它们都继承自IKeyFrame接口,其命名规则为:

<类型> KeyFrame

例如,DoubleAnimationUsingKeyFrames对应的是DoubleKeyFrame,但由于这个类并没有制定插值算法,它只是一个抽象基类,再加上插值算法后对应的关键帧类命名规范为:

<插值算法><类型> KeyFrame

例如,DoubleKeyFrame对应的几种插值算法的关键帧为:LinearDoubleKeyFrame、DiscreteDoubleKeyFrame、SplineDoubleKeyFrame、EasingDoubleKeyFrame。这些关键帧对象使用的方式都比较类似,这里就不多介绍了。

关键帧的时间点(KeyTime)

关键帧的时间点由IKeyFrame.KeyTime属性指定。它是一个KeyTime类型,它有如下几种取值类型:

  • 时间点TimeSpan:靠TimeSpan直接决定时间点,可以通过函数KeyTime.FromTimeSpan()创建,也可以直接用TimeSpan隐式转换。

  • 相对时间Percent:指定的是百分比,通过时间线的Duration来联合决定对应的时间点。通过函数KeyTime.FromPercent()创建。

  • 特殊值UnifORM:时间线平均分布每个关键帧所需要的时间。通过函数KeyTime.Uniform创建。

  • 特殊值Paced:间线按固定的帧率分配所需时间,这种情况下,变化大的关键帧分配时间长,变化小的关键帧分配时间段。通过函数KeyTime.Paced创建。

用代码创建的方式这儿就不举例了,这里就仅仅列举一下如何在XAML中表示这几种时间:

    <LinearDoubleKeyFrame Value="100" KeyTime="0:0:3" />
    <LinearDoubleKeyFrame Value="100" KeyTime="30%" />
    <LinearDoubleKeyFrame Value="100" KeyTime="Uniform" />
    <LinearDoubleKeyFrame Value="100" KeyTime="Paced" />

参考资料:

关键帧动画概述

到此这篇关于WPF实现动画效果之关键帧动画的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: WPF实现动画效果(五)之关键帧动画

本文链接: https://www.lsjlt.com/news/152364.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • WPF实现动画效果(五)之关键帧动画
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF怎么实现关键帧动画
    本篇内容介绍了“WPF怎么实现关键帧动画”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!动画与关键帧的区别普通动画WPF基础动画当中, 我们熟...
    99+
    2023-06-29
  • WPF关键帧动画介绍与实现
    目录动画与关键帧的区别普通动画关键帧介绍关键帧动画关键帧动画类型关键帧的动画类型列表帧对象的类型插值方法线性内插离散内插曲线内插组合内插Duration与KeyTimeTimeSpa...
    99+
    2022-11-13
  • WPF实现动画效果(六)之路径动画
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF实现动画效果(二)之From/To/By动画
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF实现动画效果
    学习平台 微软开发者博客:https://devblogs.microsoft.com/WT.mc_id=DT-MVP-5003986微软文档与学习:https://docs.mic...
    99+
    2022-11-13
  • WPF实现动画效果(四)之缓动函数
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF怎么实现3D画廊动画效果
    要实现3D画廊动画效果,可以使用WPF的3D功能和动画功能。以下是一个简单的实现步骤:1. 创建一个WPF项目,并添加一个Viewp...
    99+
    2023-08-18
    WPF
  • WPF实现动画效果(一)之基本概念
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF实现动画效果(三)之时间线(TimeLine)
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • WPF实现动画效果(七)之演示图板
    WPF动画效果系列 WPF实现动画效果(一)之基本概念 WPF实现动画效果(二)之From/To/By 动画 WPF实现动画效果(三)之时间线(TimeLine) WPF实现动画效果...
    99+
    2022-11-13
  • 基于WPF如何实现3D画廊动画效果
    本篇内容介绍了“基于WPF如何实现3D画廊动画效果”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!接下来想做一个图廊,所以并没有必要用立方体,...
    99+
    2023-07-05
  • WPF实现倒计时转场动画效果
    代码如下 一、创建 CountdownTimer.xaml 继承ContentControl代码如下。 using System; using System.Linq; u...
    99+
    2022-11-13
    WPF倒计时动画 WPF 倒计时 WPF 转场 动画
  • Android动画效果之自定义ViewGroup添加布局动画(五)
    前言: 前面几篇文章介绍了补间动画、逐帧动画、属性动画,大部分都是针对View来实现的动画,那么该如何为了一个ViewGroup添加动画呢?今天结合自定义ViewGroup来...
    99+
    2022-06-06
    布局 Android
  • 我的Android开发之旅(四):Android三种动画效果的浅入之帧动画
    我的Android开发之旅(四):Android三种动画效果的浅入之帧动画1. 前言2. 帧动画3. 如何使用3.1 AnimationDraw...
    99+
    2022-06-06
    android开发 动画 Android
  • WPF实现流光动画特效
    一、代码 <Window.Resources> <!--外--> <Storyboard x:Key="Storyboar...
    99+
    2022-11-13
  • 基于WPF实现3D画廊动画效果的示例代码
    接下来想做一个图廊,所以并没有必要用立方体,只需做一些“墙壁”就行了。 而在一个平面上建起另一个矩形的平面,实则非常容易,只需输入墙角的两点和高度就可以了,这...
    99+
    2023-02-28
    WPF实现3D画廊效果 WPF 3D画廊 WPF 3D
  • CSS3 中怎么利用animation实现逐帧动画效果
    本篇文章给大家分享的是有关CSS3 中怎么利用animation实现逐帧动画效果,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。animatio...
    99+
    2022-10-19
  • css3中怎么利用animation实现逐帧动画效果
    css3中怎么利用animation实现逐帧动画效果,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。常见用法::hover{&n...
    99+
    2022-10-19
  • javascript实现缓动动画效果
    本文实例为大家分享了javascript实现缓动动画效果的具体代码,供大家参考,具体内容如下 实现思路 1、主要使用setInterval定时函数 2、给需要动画的元素添加绝对定位和...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作