WPF动画基础学习总结

动画基础

创建正确动画的秘诀在于决定需要修改什么属性。

WPF动画第一条规则,每个动画依赖于一个依赖项属性,另一个需要支持相应数据类型的动画类。

Animation

实际上有两种动画:在开始值和结束值之间一逐步增加的方式改变属性的动画,以及从一个值突然编程另一个值。关键帧动画。

命名规则

平滑差值改变属性动画  类型名+Animation例如ColorAnimationDoubleAnimation

关键帧动画  类型名+AnimationUsingKeyFrames 例如StringAnimationUsingKeyFrames

ObjectAnimationUsingKeyFrames

基于路劲的动画  类型名+AnimationUsingPath 例如DoubleAnimationUsingPathPointAnimationUsingPath

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:通过该属性,可以使用指定的次数或时间间隔重复动画。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值