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

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

114

2025.08.06

Java Spring Security 与认证授权
Java Spring Security 与认证授权

本专题系统讲解 Java Spring Security 框架在认证与授权中的应用,涵盖用户身份验证、权限控制、JWT与OAuth2实现、跨站请求伪造(CSRF)防护、会话管理与安全漏洞防范。通过实际项目案例,帮助学习者掌握如何 使用 Spring Security 实现高安全性认证与授权机制,提升 Web 应用的安全性与用户数据保护。

30

2026.01.26

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

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

469

2024.01.03

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

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

13

2025.12.06

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

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

762

2023.07.26

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

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

1129

2023.07.27

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

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

801

2023.08.01

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

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

454

2023.08.02

Golang 网络安全与加密实战
Golang 网络安全与加密实战

本专题系统讲解 Golang 在网络安全与加密技术中的应用,包括对称加密与非对称加密(AES、RSA)、哈希与数字签名、JWT身份认证、SSL/TLS 安全通信、常见网络攻击防范(如SQL注入、XSS、CSRF)及其防护措施。通过实战案例,帮助学习者掌握 如何使用 Go 语言保障网络通信的安全性,保护用户数据与隐私。

0

2026.01.29

热门下载

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

精品课程

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

共0课时 | 0人学习

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

共25课时 | 9.1万人学习

Go 教程
Go 教程

共32课时 | 4.3万人学习

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

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