Animation类插值动画类

Animation类插值动画类

XAML部分代码

C#部分代码

private void Button_Click(object sender, RoutedEventArgs e{

DoubleAnimation doubleAnimation = new DoubleAnimation();

doubleAnimation.From
= btn1.Width;

doubleAnimation.AccelerationRatio = 0.5;

doubleAnimation.DecelerationRatio
= 0.2;

doubleAnimation.SpeedRatio
= 10;

doubleAnimation.AutoReverse
= true;

doubleAnimation.By
= 400;

doubleAnimation.BeginTime
= new TimeSpan(1);

doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));

doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;

btn1.BeginAnimation(Button.WidthProperty, doubleAnimation);

DoubleAnimation w = new DoubleAnimation();

w.From = btn1.Height;

w.AccelerationRatio = 0.5;

w.DecelerationRatio = 0.2;

w.SpeedRatio = 10;

w.AutoReverse = true;

w.By = 500;

w.BeginTime = new TimeSpan(1);

w.Duration = new Duration(TimeSpan.FromSeconds(5));

w.RepeatBehavior = RepeatBehavior.Forever;

btn1.BeginAnimation(Button.HeightProperty, w);

}

动画效果如下(动画按钮那个Button会一直变大变小)

DoubleAnimation doubleAnimation = new DoubleAnimation();

用于实例化DoubleAnimation类

doubleAnimation.From = btn1.Width;

From属性,From属性是元素的开始值,这里是获取到name为btn1的元素的Width

doubleAnimation.AccelerationRatio = 0.5;

doubleAnimation.DecelerationRatio =
0.2;

AcclerationRation和DecelerationRation属性压缩部分时间轴,使动画运行的更快,并将拉伸其他时间进行补偿,使总时间保持不变。这两个属性都表示百分比值,例如,将AcceleRation属性设置为0.3,表示希望使用动画持续时间中前30%的时间进行加速。例如在1个10秒的动画中,前3秒会加速运行,而剩余的7秒会以恒定不变的速度运行,如果将DeceleRation属性设置为0.3,那么最后3秒回减速运行

doubleAnimation.SpeedRatio
= 10;

SpeedRatio 用于提高或减慢动画运行速度, SpeedRatio的初始属性值是1,所以如果将SpeedRatio属性值改为5那么动画运行速度将加快五倍,改为0.5那么动画运行速度将减慢一半的运行速度,

这里设置的值是10也就是说,动画运行速度将加快10倍

doubleAnimation.AutoReverse
= true;

AutoReverse值, AutoReverse默认值为frse为true时,动画完成播放时会自动反向播放,返回原始值(反向播放动画发生在动画完成之后,不受总时间限制/不会像使用AccelerationRatio或DecelerationRatio一样会压缩原动画的执行时间)

doubleAnimation.By = 400;

By与To一样是设置动画元素的结束值区别是

To值是设置或获取动画元素的结束值

By获取或设置动画元素更改其起始值时所依据的总量

也就是说如果使用To值,当动画运行完了之后动画元素值未退回原始值时,再次运行动画,动画将将不发生改变,额,动画不是不运行了,动画依旧在运行,只不过动画运行的初始值已经和To值一样了,使用动画看起来不发生改变

By值,By值是获取或设置动画元素更改其起始值时所依据的总量也就是说By值可以循环使用,因为他是更改动画元素起始值所依据的总量,也就是说它是在动画元素起始值的基础上再加上或减去By的值

doubleAnimation.BeginTime = new TimeSpan(1);

BeginTime 动画延迟, 设置将被添加到动画开始之前的延时时间(TimeSpan类型),这一延时总被加载到总时间,具有5秒延时的5秒动画,总时间是10秒

doubleAnimation.Duration = new Duration(TimeSpan.FromSeconds(5));

Duration 设置动画开始到结束的运行时间,这里设置的是五秒
Seconds/秒

doubleAnimation.RepeatBehavior = RepeatBehavior.Forever;

RepeatBehavior 设置动画运行的次数当RepeatBehavior值为Forever时就会一直重复动画

btn1.BeginAnimation(Button.WidthProperty, doubleAnimation);

BeginAnimation 为元素设置BeginAnimation方法,

Button.WidthProperty 进行动画的是Button的宽

特别注意!

WPF动画只是暂时的, 这意味着它们不能真正改变基本属性的值,当动画处于活动状态时,只是覆盖了属性的值。

单向动画,在动画运行结束后会保持处于活动状态,这是因为动画需要将按钮的宽度保持为新值,这会导致如下常见问题,如果尝试使用代码在动画完成后修改属性值,代码将不会起作用,因为代码只是为属性指定了一个新的本地值,但仍会先试用动画之后的属性值。

有两个解决方法

1) 
设置AutoReverse属性,将AutoReverse值设置为true如下图

(用法前面有就不写代码了)

但是,如果是在动画完成之后为属性设置最后的值,将会不起作用,因为动画会仅仅返回动画之前的值

方法二:

改变Fillbehavior属性,

Fillbehavior属性默认值为HoldEnd这意味着当动画结束时,会继续为目标元素应用最后的值,但如果将Fillbehavior的属性修改为Stop,这时候只要动画结束,属性就会恢复原来的值,这时候就可以为动画赋值了

所以,如果想修改动画完成后的属性值,可以使用AutoReverse属性为true,(适用于动画结束前) 也可以使用Fillbehavior并设置属性为stop(适用于动画结束后)

但是!这两个都不适用于RepeatBehavior属性值为Forever的时候,因为这时候动画会一直运行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Qayrup

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值