65.9K
CodeProject 正在变化。 阅读更多。
Home

在WPF中轻松制作动画。

2015年5月19日

CPOL

3分钟阅读

viewsIcon

9159

downloadIcon

279

使用我自己开发的MAnimation类轻松地为控件制作动画,任何人都可以使用它。

引言

当我刚接触WPF时,我看到过几个关于对象动画的例子。但它们相当复杂。随着时间的推移,我逐渐熟悉了它们。然而,制作动画仍然需要大量的打字。所以我决定编写这个类来最大限度地减少这种工作量。 MSDN 链接 将提供有关各种动画类的更详细信息。 我将尝试涵盖所有基本部分。

使用代码

MAnimation 类包含用于轻松制作 WPF 控件或 UIElements 动画的方法。它包含用于下面讨论的各种动画的方法。

平移或滑动动画

顾名思义,它可用于将控件从一个点移动或滑动到另一个点。为此,您可以使用方法 MAnimation.SlidingAnimation()。 此方法初始化两个新的 TranslateTransform 类对象。 一个用于 X 属性,一个用于 Y。 它还初始化一个 DoubleAnimation 类对象,该对象是 TranslateTransform 类执行其 BeginAnimation() 方法所必需的。 它是一种时间线,包含持续时间、FillBehavior(动画结束后控件是否保留值)、EasingFunction(即动画的加速和减速率)等。

好的,现在如何使用它

Dim animator As New MAnimation
animator.SlidingAnimation(ControlToBeAnimated, initialXValue, initialYValue, finalXValue, finalYValue, 
durattion, FillBehavior, easingFuntion)

C#

MAnimation animator = new MAnimation();
animator.SlidingAnimation(ControlToBeAnimated, initialXValue, initialYValue, finalXValue, finalYValue, 
durattion, FillBehavior, easingFuntion);

在 easingFuntion 的位置,您可以编写“New NameOfEasingFunction()”,例如 -

animator.SlidingAnimation(ControlToBeAnimated, initialXValue, initialYValue, finalXValue, finalYValue, 
durattion, FillBehavior, New BounceEase)

C#

animator.SlidingAnimation(ControlToBeAnimated, initialXValue, initialYValue, finalXValue, finalYValue, durattion, FillBehavior, new BounceEase())

有关更多类型和详细信息,请访问此 链接

属性动画

它为控件的特定属性(例如 OpacityProperty 或任何其他属性)设置动画。 您可以使用的方法是 MAnimation.AnimateProperty()。 它初始化一个 DoubleAnimation 类对象,使用传递的参数设置其属性,并将其与 StoryBoard 对象关联。 用法

Dim animator As New MAnimation
animator.AnimateProperty(MyControl.Name, initialValue, finalValue, duration, PropertyPath, 
MyControlContainer, FillBehavior, easingFunction)

C#

MAnimation animator = new MAnimation();
animator.AnimateProperty(MyControl.Name, initialValue, finalValue, duration, PropertyPath, MyControlContainer, FillBehavior, easingFunction);

假设您必须淡入一个 Canvas 控件,那么

Dim animator As New MAnimation
animator.AnimateProperty(MyControl.Name, 0, 1, 1, New PropertyPath(Canvas.OpacityProperty), 
Me, FillBehavior.Hold, Nothing)

C#

MAnimation animator = new MAnimation();
animator.AnimateProperty(MyControl.Name, 0, 1, 1, new PropertyPath(Canvas.OpacityProperty), this, FillBehavior.Hold, null);

如您所见,PropertyPath 构造函数包含 Canvas.OpacityProperty。 也就是说,您必须专门指定控件类型和要为其设置动画的属性。“Me”或“this”表示窗口,“Nothing”或“null”描述不使用 easingFunction。

旋转动画-

这种类型的动画围绕提供的坐标以一定的角度旋转控件。 MAnimation.Rotate() 方法可用于此目的。 此方法创建一个新的 RotateTransform 和一个 DoubleAnimation 类对象来旋转控件。 用法 -

Dim animator As New MAnimation
animator.Rotate(myControl, centerX, centerY, InitialAngle, FinalAngle, FillBehavior,
                         easeFunction, duration)

C#-

MAnimation animator = new MAnimation();
animator.Rotate(myControl, centerX, centerY, InitialAngle, FinalAngle, FillBehavior, easeFunction, duration);

centerX 和 centerY 是控件要围绕其旋转的 X 和 Y 坐标。 控件的顶部被认为是 (0,0)。 InitialAngle 通常为 0。如果 FinalAngle 为正,则控件沿顺时针方向旋转,如果为负,则沿逆时针方向旋转。

倾斜动画-

顾名思义,它根据参数围绕其长度、宽度或两者倾斜控件。 MAnimation.SkewAnimation() 是要使用的方法。 此方法创建一个新的 SkewTransform 和一个 DoubleAnimation 类对象来倾斜控件。 用法-

Dim animator As New MAnimation
animator.SkewAnimation(myControl, CenterX, CenterY, AngleX, AngleY, duration, easeFunction,FillBehavior)

C#-

MAnimation animator = new MAnimation();
animator.SkewAnimation(myControl, CenterX, CenterY, AngleX, AngleY, duration, easeFunction, FillBehavior);

我坚持让您查看 MSDN 说明,以了解更多关于倾斜变换的信息,或者您可以仅使用不同的值测试此方法。

MSDN 说明。

缩放动画-

它根据提供的值沿高度和宽度缩放控件。 此方法的工作方式与之前的类似。 用法-

Dim animator As New MAnimation
animator.ScaleAnimation(myControl, centerX, centerY, scaleX, scaleY, duration, easeFunction, FillBehavior)

C#-

MAnimation animator = new MAnimation();
animator.ScaleAnimation(myControl, centerX, centerY, scaleX, scaleY, duration, easeFunction, FillBehavior);

scaleX(用于宽度)和 scaleY(用于高度)值是宽度和高度要缩放的因子。 也就是说,如果将 scaleWidth 设置为 2,则控件的宽度将加倍。

MSDN 说明。

历史

版本-1.0

更改日志-

添加了旋转、倾斜和缩放动画方法。

© . All rights reserved.