c# - 如何显示动画?
问题描述
好的,我有一个项目,用OEM RX-8 卫星导航罩制造一个汽车电脑!虽然我喜欢这个人选择的界面,但我要自己写。
所以我有两个问题:
什么是“首选”(我敢说最好)类型的动画媒体?IE:Gif、SVG、MPeg、Avi 等。
一旦确定了#1,您会在 WinForms 或 WPF 中执行此操作吗?由于项目将具有其他第 3 方参考,因此必须是这两者之一。
当需要自定义初始屏幕时,我的默认设置总是转到 GIF 和 WinForms。我已经好几年没有做过桌面项目了,所以想看看是否有更新或更好的选择。
我的想法将是两个动画。3 到 5 秒长的“加载”和导航菜单屏幕时始终可以看到的“背景”。
谢谢!
解决方案
这个问题太宽泛了,无法回答,但是,我在早期就遇到过这样的情况,我需要开始做这样的决策,因为我没有足够的知识。所以这里...
- 我应该使用 GIF/AVI/MPEG 等...吗?
首先,您需要对实际情况有一个很好的了解Animations
。对于视频,动画只是其自身模拟的东西,是视频的一部分。当涉及到软件或应用程序时,这意味着一些对象需要根据一些数学来改变它的一些属性。
一旦你澄清了这一点,你就会更好地理解要做什么。现在,在应用程序中使用 GIF/MPEG 或 aka 视频文件只能创建它具有动画的错觉,而不是实际的。比如说,你想在你的应用程序中添加一个加载微调器。您可以创建一个使用 After Effects 旋转的微调器的 GIF,并将其与Image
控件中的某个位置嵌入到您的应用程序中。
或者
实际上,您可以draw
旋转旋转器/圆的一部分并编写代码以使其旋转,从而创建实际的动画。
无论如何,回到实际问题,答案是它取决于!. 如果我们在谈论动画,那么我们首先需要了解我们的需求。此外,我们需要了解什么是视频,什么是图像。AGif
只是一组图像,也就是图像文件本身,而 MPEG/AVI 等是视频文件。所以当然GIF
是要走的路。
- WinForms 与 WPF
好吧,这就是我很久以前对动画和所有东西感兴趣时问自己的问题。看,在这两种情况下,如果您知道要实现哪些逻辑,您就可以构建所需的功能。但是,为了简短起见,您必须知道的一条线是,“当您制作交互式、复杂的 GUI 应用程序时,与 WinForms 相比,WPF 是更好的选择”。
假设您要为menu
滑入和滑出设置动画。在 WinForms 中,您必须使用 aTimer
并在事件中设置菜单的位置,Tick
从而每毫秒更改一次属性值。这样就完成了工作,但是当您实际实施它时,您会看到诸如闪烁、屏幕部分被切掉等问题。
所有这些都在 WPF 中得到解决,它非常关注动画。在 WPF 中,我们称它们为StoryBoard
s。在那里,所有这些属性值更改都在后台处理,您几乎不需要编写任何代码。
但这不应该是决定 和 之间的唯一WinForm
因素WPF
。你还需要考虑你的技能。例如,在 WinForms 中,您只需拖放并创建您的设计。当然,您可以创建Custom Control
具有自定义外观的复杂 s。这需要大量的 C# 知识以及一些大量的设计原则。在 WPF 中,您不仅需要使用 C# 编写逻辑,还需要使用 XAML 创建设计。您还需要对一些用于缓动函数和所有数学的数学有很好的理解(但不是必需的)。
如果您认为自己可以付出努力并且必须拥有出色的 GUI 应用程序,请使用 WPF 并使用很少的 GIF(整个应用程序中只有一两个)并通过StoryBoard
s 创建大多数动画。如果您只想要一个 GUI 应用程序,也许外观漂亮但没有动画,请使用 WinForms。但是,在 WinForms 中使用纯 C# 编写动画所需的工作量要比在纯 XAML 或 After Effects 中编写动画所需的工作量要多。
希望这个答案可以帮助您做出正确的决定。干杯!
编辑 0.1
建议最多使用一两个 GIF 的原因是因为我个人认为 WPF 在通过Image
控件播放此类文件时会消耗更多内存,并且还可能存在内存泄漏。所以要非常小心。
编辑 0.2
好吧,正如我提到的,可以使用 WinForms 制作复杂的 GUI 应用程序,让我解释一下如何完成它。
假设您想要一个带有蓝色边框和阴影的文本框,您不能纯粹在 WinForms 中创建它。但它仍然可以完成。如果你知道 Photoshop,你可以简单地用阴影绘制一个,导出它,将它rectangle
拖放到Panel
你的 .为平坦,编写一些代码以在文本框为焦点时删除边框/边框颜色。Window
Background
BackgroundImage
BorderStyle
最后,你有一个很棒的带有阴影的文本框。这只是一个例子。您可以借助这些第三方工具在 WinForms 中创建其他复杂的设计,但是是的,它不是纯 WINFORMS!. 但是再一次,动画和 WinForms 从来都不是一个很好的组合。
推荐阅读
- java - 在 CPLEX for Java 中设置时间限制
- snowpack - snowpack:项目文件夹之外的参考文件
- python-3.x - 我应该在 Pytorch 的以下架构中将输入图像尺寸放在哪里?
- c++ - 使用`dlopen`时有关“未定义符号”的共享库错误
- netsuite - 此处应有一个选项,而不是在使用 sdfcli 命令验证或部署 SuiteApp 项目时返回的“T”
- python - UnicodeDecodeError:从 .txt 文件中读取西班牙语文本
- wxwidgets - wxOwnerDrawnComboBox-inherited 类不可聚焦
- linux - 将顶部输出重定向到文件时可以看到特殊字符
- java - 为什么我已经抛出未报告的异常 java.net.MalformedURLException?
- html - 如何使这些 div 响应任何设备?