在我的 wpf 过渡动画中闪烁

Posted

技术标签:

【中文标题】在我的 wpf 过渡动画中闪烁【英文标题】:blinking in my wpf transition animation 【发布时间】:2012-08-13 12:03:17 【问题描述】:

我正在尝试在图像上实现带有着色效果的自定义过渡动画。 我正在使用我制作的用于以图形方式指定缓动贝塞尔函数的系统,并且我在一个名为 Spline 的类中处理所有样条数据。

我正在为发送到样条线的静态方法的时间属性设置动画,以计算用于缓动的贝塞尔数据。 然后我得到我发送到我的着色器效果的时间属性的计算值 但我不能在这个过渡上使用 beginAnimation,因为播放动画的类是非 UI 类,并且已经从抽象类继承。

如果我想使用 beginAnimation,我必须让抽象类继承自 dependencyObject 以使用依赖属性作为 BeginAnimation 的参数,但我得到了这个错误

this.BeginAnimation(TimeProperty, anim);

“MyClass”不包含 BeginAnimation 的定义,并且找不到接受“MyClass”类型的第一个参数的扩展方法 BeginAnimation(您是否缺少 using 指令或程序集引用)

所有这些依赖/动画系统都不符合我的需要,因为我没有直接在 ui 上工作,我现在完全卡住了

有什么想法吗?

(我使用了 dispatcherTimer 来解决这个问题,但是当动画完成时,我可以在半秒内看到我的应用程序的背景颜色,然后我的第二张图片终于出现了,但我不想要这种行为,因为它会上市...)

【问题讨论】:

【参考方案1】:

使用关键帧动画。您可以向其中添加单个框架。例如,您可以每隔 2 个关键帧隐藏一些内容。

【讨论】:

我正在使用我制作的工具中的贝塞尔曲线创建自定义缓动函数,我可以在其中设计我想要图形化的每个缓动函数,并避免用户为数学而烦恼。但在我的应用程序中,我不能使用关键帧,因为我使用自定义类型的样条缓动函数,而 wpf 的样条关键帧系统意味着第一个点为 0,0,最后一个点为 1,1 即使第二个动画使用离散动画关键帧为第二个图像的不透明度设置动画以覆盖第一个图像,我仍然在动画停止后弹出图像【参考方案2】:

我最终使用 Storyboard 来实现这一点,在我的抽象类上使用 Dependency 对象继承。

即使在非 UI 对象上使用 Sotryboard/dependencyProperty 系统不是很好(在我看来),它也可以工作。

我有一个故事板,用于将 MyClass 中名为 Time 的 DependencyProperty 从 0 设置为 1。 在 Time 的 PropertyChangedCallback 中,我根据我的自定义样条缓动函数计算我的新时间值,然后将其影响到我的 Shader 的 Progress 属性。

还是谢谢你的关心。

【讨论】:

以上是关于在我的 wpf 过渡动画中闪烁的主要内容,如果未能解决你的问题,请参考以下文章

用 CSS3 动画模仿闪烁标签

用 CSS3 动画模仿闪烁标签

presentViewController 过渡动画

presentViewController过渡动画

Flutter:同时进行英雄过渡 + 小部件动画?

如何动画视图插入/删除的过渡?插入动画不起作用