0

0

[UWP]使用SpringAnimation创建有趣的动画

看不見的法師

看不見的法師

发布时间:2025-09-23 08:19:34

|

507人浏览过

|

来源于php中文网

原创

1. 什么是自然动画

最近,我使用了弹簧动画(SpringAnimation)制作了两个番茄钟。关于弹簧动画,官方文档已经提供了足够详细的说明,本文将摘录一些关键内容。

在传统的UI设计中,关键帧动画(KeyFrameAnimation)是描述运动的主要方式。这种方法为设计师和开发者提供了定义开始、结束和内插的多种方式。尽管在许多情况下非常有效,但关键帧动画缺乏动态性,运动效果在不同情况下都显得单一。

[UWP]使用SpringAnimation创建有趣的动画相反,物理引擎能够提供更生动和动态的动画效果,但对设计师和开发者的控制力较少,难以整合到传统UI中。

自然动画(NaturalMotionAnimation)旨在弥合这种差距,实现控制力和运动动态性的平衡。它允许对关键动画元素(如开始和结束)进行控制,同时保持运动的自然和生动。

  1. 什么是弹簧动画

[UWP]使用SpringAnimation创建有趣的动画自从Fall Creators Update发布以来,UWP引入了新的动画类型:弹簧动画(SpringAnimation)。与传统的贝塞尔曲线动画相比,弹簧运动具有不稳定性,通常能引发观看者有趣且愉悦的情感反应。它提供了以下功能:

• 定义开始和结束值。
• 使用InteractionTracker定义InitialVelocity并绑定到输入。
• 定义特定于运动的属性(如弹簧的DampingRatio)。

具体来说:

• DampingRatio – 表示在动画中使用的弹簧运动的阻尼级别。
• Period – 弹簧执行单次振荡所花费的时间。
• Final、Starting Value – 定义弹簧运动的开始和结束位置(如果未定义,则开始值和最终值将是当前值)。
• Initial Velocity – 运动的编程初始速度。

其中,DampingRatio是最重要的属性。

Damping Ratio Value 描述
DampingRatio = 0 Undamped – 弹簧将振荡很长时间
DampingRatio = 1 Critically damped – 弹簧不会振荡
DampingRatio > 1 Overdamped – 弹簧将通过突然减速而不振荡快速到达其目的地

定义好这些属性后,可以将弹簧动画的NaturalMotionAnimation传入CompositionObject的StartAnimation或InteractionTracker的InertiaModifier的Motion属性。

  1. 使用弹簧动画

使用弹簧动画的代码与一般合成动画相似,只需将动画改为带

Spring
的函数:

var springAnimation = _compositor.CreateSpringVector3Animation();
springAnimation.DampingRatio = 0.5f;
springAnimation.Period = TimeSpan.FromMilliseconds(200);
springAnimation.FinalValue = new Vector3(offset, 0);
visual.StartAnimation(nameof(visual.Offset), springAnimation);

上面的代码定义了一个位移的Spring动画,效果如下:

[UWP]使用SpringAnimation创建有趣的动画

Period
改为50毫秒,
DampingRatio
改为0.85f,效果如下:

[UWP]使用SpringAnimation创建有趣的动画(偶尔使用全白背景也不错。)

  1. 其它组合

在处理Offset和Scale/Size动画的常见情况下,Windows设计团队为不同类型的弹簧推荐了以下DampingRatio和Period值:

FILM
FILM

利用两张现有的图像,创建一个动画。

下载
Property Normal Spring Dampened Spring Less-Dampened Spring
Offset Damping Ratio = 0.8
Period = 50 ms
Damping Ratio = 0.85
Period = 50 ms
Damping Ratio = 0.65
Period = 60 ms
Scale/Size Damping Ratio = 0.7
Period = 50 ms
Damping Ratio = 0.8
Period = 50 ms
Damping Ratio = 0.6
Period = 60 ms

有兴趣的可以下载Xaml-Controls-Gallery来尝试这些组合:

[UWP]使用SpringAnimation创建有趣的动画

  1. 结语

您可以安装我的番茄钟应用来试玩这些动画,安装地址:

一个番茄钟

弹簧动画真的让人欲罢不能。如果与用户输入关联,运动还可以根据用户的速度进行相应调整。这部分内容在官方文档中有详细的例子,由于我的番茄钟应用不需要这个功能,所以没有深入研究。有兴趣的朋友可以参考官方文档。

  1. 参考

弹簧动画 - Windows UWP applications Microsoft Docs

自然运动动画 - Windows UWP applications Microsoft Docs

NaturalMotionAnimation Class (Windows.UI.Composition) - Windows UWP applications Microsoft Docs

KeyFrameAnimation Class (Windows.UI.Composition) - Windows UWP applications Microsoft Docs

microsoft_Xaml-Controls-Gallery

  1. 源码

SpringTextView.xaml.cs at master

KonosubaView.xaml.cs at master

相关专题

更多
spring框架介绍
spring框架介绍

本专题整合了spring框架相关内容,想了解更多详细内容,请阅读专题下面的文章。

98

2025.08.06

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

456

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

6

2025.12.06

windows查看端口占用情况
windows查看端口占用情况

Windows端口可以认为是计算机与外界通讯交流的出入口。逻辑意义上的端口一般是指TCP/IP协议中的端口,端口号的范围从0到65535,比如用于浏览网页服务的80端口,用于FTP服务的21端口等等。怎么查看windows端口占用情况呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

516

2023.07.26

查看端口占用情况windows
查看端口占用情况windows

端口占用是指与端口关联的软件占用端口而使得其他应用程序无法使用这些端口,端口占用问题是计算机系统编程领域的一个常见问题,端口占用的根本原因可能是操作系统的一些错误,服务器也可能会出现端口占用问题。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

1051

2023.07.27

windows照片无法显示
windows照片无法显示

当我们尝试打开一张图片时,可能会出现一个错误提示,提示说"Windows照片查看器无法显示此图片,因为计算机上的可用内存不足",本专题为大家提供windows照片无法显示相关的文章,帮助大家解决该问题。

748

2023.08.01

windows查看端口被占用的情况
windows查看端口被占用的情况

windows查看端口被占用的情况的方法:1、使用Windows自带的资源监视器;2、使用命令提示符查看端口信息;3、使用任务管理器查看占用端口的进程。本专题为大家提供windows查看端口被占用的情况的相关的文章、下载、课程内容,供大家免费下载体验。

419

2023.08.02

windows无法访问共享电脑
windows无法访问共享电脑

在现代社会中,共享电脑是办公室和家庭的重要组成部分。然而,有时我们可能会遇到Windows无法访问共享电脑的问题。这个问题可能会导致数据无法共享,影响工作和生活的正常进行。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2343

2023.08.08

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Spring中文手册
Spring中文手册

共0课时 | 0人学习

马士兵spring视频教程
马士兵spring视频教程

共25课时 | 9万人学习

Go 教程
Go 教程

共32课时 | 3.2万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号