动画基础
创建正确动画的秘诀在于决定需要修改什么属性。
WPF动画第一条规则,每个动画依赖于一个依赖项属性,另一个需要支持相应数据类型的动画类。
Animation
实际上有两种动画:在开始值和结束值之间一逐步增加的方式改变属性的动画,以及从一个值突然编程另一个值。关键帧动画。
命名规则
平滑差值改变属性动画 类型名+Animation例如ColorAnimation,DoubleAnimation
关键帧动画 类型名+AnimationUsingKeyFrames 例如StringAnimationUsingKeyFrames
ObjectAnimationUsingKeyFrames
基于路劲的动画 类型名+AnimationUsingPath 例如DoubleAnimationUsingPath和PointAnimationUsingPath
DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = 106;
widthAnimation.To = this.Width - 30;
widthAnimation.Duration = TimeSpan.FromSeconds(5);
cmdGrow.BeginAnimation(Button.WidthProperty, widthAnimation);
差值动画需要三个细节:开始值(From),结束值(To),动画执行时间(Duration)
From属性如果设置,每次点击的时候都会重新设置为设置的值,并重新开始动画。
许多情况下可能不需要动画从最初的From值开始。
l 创建能够被触发多次,并逐次累加的动画。
l 创建可能相互重叠的动画。例如,可使用mouseEnter事件触发扩展按钮的动画,并使用MouseLeave事件触发将按钮缩小为原尺寸的互补动画。(鱼眼效果),如果连续快速的将鼠标多次移动到这种按钮上,并移开,每个新动画就会打断上一个动画。
上述实例中就属于第二种,会出现抖动现象,解决这个问题就是不设置From属性,并硬编码按钮的宽度。当省略From属性时,动画开始的属性值是当前的值。
To属性,就像From属性一样,也可是省略,当省略To属性时,把最有一次设置的值当作To的属性值。
By属性,即使不使用To属性,也可以使用By属性。By属性用于创建按设置数量改变值得动画。
大部分使用插值的动画类通常都提供了By属性,但并非全部如此,例如对于非数值类型来说,By属性是没有意义的。另一种方法能达到类似的行为,不需要设置By属性,通过设置IsAdditive。当设置IsAdditive时,From属性就是跳到比当前大多少的值,然后增加,只到最后的值,最后的值是动画开始前的当前值大To设置的值
widthAnimation.From = 0;
widthAnimation.To = -10;
widthAnimation.Duration = TimeSpan.FromSeconds(5);
widthAnimation.IsAdditive = true;
btn.BeginAnimation(Button.WidthProperty, widthAnimation);
同时发生的动画:
DoubleAnimation widthAnimation = new DoubleAnimation();
widthAnimation.From = 50;
widthAnimation.To = 100;
widthAnimation.Duration = TimeSpan.FromSeconds(5);
DoubleAnimation heightAnimation = new DoubleAnimation();
heightAnimation.From = 30;
heightAnimation.To = 60;
heightAnimation.Duration = TimeSpan.FromSeconds(2);
btn.BeginAnimation(Button.WidthProperty, widthAnimation);
btn.BeginAnimation(Button.HeightProperty, heightAnimation);
在这个实例中宽度和高度不会准确的在时间间隔增长。可通过创建绑定到同一个时间线的动画,突破这一设置。
TimeLine类,继承自TimeLine抽象类的三个主要分支,当播放音频或视频文件时使用MediaTimeLine类,AnimationTimeLine分支用于到目前为止分析过的基于属性的动画系统。
而TimeLineGroup分支则允许同步时间线并控制他们播放。
TimeLine类的几个重要属性。
BeginTime:设置将被添加到动画之前的延迟时间
Duration:设置动画开始到结束的事件
SpeedRatio:提高或减慢动画的速度。
AccelerationRatio/DecelerationRatio:使动画不是线性,从开始时较慢,然后增速AccelerationRatio的值,结束时减速DecelerationRatio的属性值。
AutoReverse:动画自动反向播放
FillBehavior:决定动画结束时如何操作。
RepeatBehavior:通过该属性,可以使用指定的次数或时间间隔重复动画。