Timeline介绍
所有的动画类型均继承自Timeline类,包括StoryBoard,因此所有动画都是专用类型的时间线。它提供的属性让你可以指定该时间段的长度、开始时间、重复次数以及该时间段内时间进度的快慢等。
属性 | 说明 |
---|---|
Duration | 获取或设置此时间线播放的时间长度,而不是计数重复。 |
AutoReverse | 获取或设置一个值,该值指示时间线在完成向前迭代后是否按相反的顺序播放。 |
RepeatBehavior | 获取或设置此时间线的重复行为。 |
FillBehavior | 获取或设置一个值,该值指定 Timeline 在到达其有效期末尾后的行为。 |
AccelerationRatio | 获取或设置一个值,该值指定在将时间消逝从零加速到其最大速率的过程中所占用时间线的 Duration 的百分比。 |
DecelerationRatio | 获取或设置一个值,该值指定在将时间消逝从其最大速率减速到零的过程中所占用时间线的 Duration 的百分比。 |
SpeedRatio | 获取或设置此 Timeline 的时间相对于其父级的前进速率。 |
BeginTime | 获取或设置此 Timeline 应开始的时间。 |
Name | 获取或设置此 Timeline 的名称。 |
DesiredFrameRate | 获取或设置此时间线及其子时间线所需的帧速率。以上属性均为依赖属性,这个为附加属性 |
WPF动画中的关键对象
动画类(Animation)+故事板(StoryBoard)
一:故事板(StoryBoard):
-
介绍
1.Storyboard 是一种容器时间线,它为其包含的时间线提供目标信息( TargetName 和 TargetProperty)。
2.Storyboard 在动画开发中也是十分重要的,相当于动画的舞台,控制动画的运行、开始、停止、恢复,而动画类则相当于动画的演员。舞台上根据时间线在指定的时间节点安排演员上场,组成完整动画。
3.Storyboard 提供了开始,暂停,恢复,停止等方法来控制动画的播放流程。 -
使用
若要使用 Storyboard 组织和应用动画,可以将动画添加为 Storyboard 的子时间线。 Storyboard 类提供 Storyboard.TargetName 和 Storyboard.TargetProperty 附加属性。 可以在动画上设置这些属性以指定其目标对象和属性。
DoubleAnimation doubleAnimation = new DoubleAnimation
{
From = 0,
To = 1,
Duration = TimeSpan.FromSeconds(1),
AutoReverse = true,
RepeatBehavior = new RepeatBehavior(1)
};
Storyboard.SetTargetProperty(doubleAnimation, new PropertyPath(Image.OpacityProperty));
Storyboard.SetTarget(doubleAnimation, this.winImg);
Storyboard blinkAnimation = new Storyboard();
blinkAnimation.Children.Add(doubleAnimation);
// 启动动画
blinkAnimation.Begin();
二:动画类(Animation):
动画类分三大类共43个动画类:简单线性动画、关键帧动画、路径动画
动画的必要条件:
对象必须实现Animatable接口(界面控件基本都实现了)。
关联属性必须是依赖属性。
需要有与属性对应类型的动画类,比如说控件的Width属性,其类型是Double类型,Double类型对应的动画类型为DoubleAnimation。而有些属性是没有对应的动画类的,比如string类型是没有对应的简单线性动画类的,此时如果是关键帧动画,而恰好要进行动画的属性是没有动画类型的,可以使用ObjectAnimationUsingKeyFrames。动画的选择:
根据属性类型确定
例如:width是double类型的,就可以选择double的动画
改变大小、位置、颜色、显示等From, To, Duration:
From和To指定了动画的开始和结束值,而Duration决定了动画的持续时间。简单线性动画:18个类型名 + Animation
简单线性动画 | 简单线性动画 | 简单线性动画 |
---|---|---|
ByteAnimation | ColorAnimation | DecimalAnimation |
DoubleAnimation | Int16Animation | Int32Animation |
Int64Animation | Point3DAnimation | PointAnimation |
PopupAnimation | QuaternionAnimation | RectAnimation |
Rotation3DAnimation | SingleAnimation | SizeAnimation |
ThicknessAnimation | Vector3DAnimation | VectorAnimation |
简单线性动画控件的常用属性
Duration:时间,时:分:秒,例:Duration="0:0:1"
From:起始数据,可以不设置,直接从当前控件对象中获取数据。
To:结束数据。
By:从控件对象对应属性的当前值开始增量变化到指定数值,比如原先是50,那么By设定成200的最终值就是250。设置了By属性则不需要在设置From和To
示例:
Image answerImage = GetImage(currentTopic.Answer);
// 创建一个DoubleAnimation来改变Image的Opacity属性
DoubleAnimation opacityAnimation = new DoubleAnimation
{
From = 1, // 初始透明度
To = 0, // 目标透明度(隐藏)
Duration = TimeSpan.FromSeconds(0.5), // 动画持续时间
AutoReverse = true, // 动画结束后反向播放
RepeatBehavior = new RepeatBehavior(2) // 动画重复2次(隐藏-显示-隐藏-显示)
};
Storyboard.SetTargetProperty(opacityAnimation, new PropertyPath(Image.OpacityProperty));
Storyboard.SetTarget(opacityAnimation, answerImage);
// 创建Storyboard动画
Storyboard blinkAnimation = new Storyboard();
blinkAnimation.Children.Add(opacityAnimation);
// 启动动画
blinkAnimation.Begin();
- 关键帧动画:22个类型名+AnimationUsingKeyFrames
关键帧动画 | 关键帧动画 | 关键帧动画 |
---|---|---|
BooleanAnimationUsingKeyFrames | ByteAnimationUsingKeyFrames | CharAnimationUsingKeyFrames |
ColorAnimationUsingKeyFrames | DecimalAnimationUsingKeyFrames | DoubleAnimationUsingKeyFrames |
Int16AnimationUsingKeyFrames | Int32AnimationUsingKeyFrames | Int64AnimationUsingKeyFrames |
MatrixAnimationUsingKeyFrames | ObjectAnimationUsingKeyFrames | Point3DAnimationUsingKeyFrames |
PointAnimationUsingKeyFrames | QuaternionAnimationUsingKeyFrames | RectAnimationUsingKeyFrames |
Rotation3DAnimationUsingKeyFrames | SingleAnimationUsingKeyFrames | SizeAnimationUsingKeyFrames |
StringAnimationUsingKeyFrames | ThicknessAnimationUsingKeyFrames | Vector3DAnimationUsingKeyFrames |
VectorAnimationUsingKeyFrames |
- 路径动画:3个类型名 + AnimationUsingPath
路径动画 | 路径动画 | 路径动画 |
---|---|---|
DoubleAnimationUsingPath | PointAnimationUsingPath | MatrixAnimationUsingPath |