控制动画

书名:WPF专业编程指南
作者:李应保
出版社:电子工业出版社
出版时间:2010-01
ISBN:9787121100116


第15章 动画

一、控制动画

  • 动画的很多特性都是由TimeLine类控制的,它处在动画类继承树靠近树根的位置。
    所谓TimeLine是指一个时间片,这个类提供了动画常用的属性,如动画时间、开始时刻、动画重复次数、动画终止的状态等

1 动画所用的时间(duration)

  • Duration用来指定某个相关属性动画从开始到结束所用的时间,如前面的例子:
    da.Duration = new Duration(TimeSpan.Parse("0:0:5"));
    一般使用TimeSpan来说明动画的时间,其格式如下:
    days.hours:minutes:seconds.fraction.
    注意在日和小时之间使用的是点“.”,在时分秒之间使用的是“:”,秒以下又是点“.”。常用动画通常在分秒之间,可以使用简化的形式,如5秒钟可以写为:
    “0:0:5”
    但不能把3.5秒写成“3.5”而要写成“0:0:3.5”,因为“3.5”表示3天零5小时。

  • 虽然在大多情况下,Duration用TimeSpan来表达,但是Duration和TimeSpan并不是一个类型。Duration除了用TimeSpan表示具体的动画时间之外,还有两个特殊值:Automatic和Forever。Automatic是Duration的默认值,其值为1秒,所以若不设定Duration,则WPF为动画提供的默认Duration为1秒。Forever主要用在故事板Storyboard中

2 设定动画开始时间BeginTime

  • 在前面的例子中,我们在双击鼠标事件发生的时候立即开始动画,即BeginTime设为为0(默认值)。
    实际上,也可以设定动画在某个时间开始,例如可以让动画在双击鼠标事件后两秒开始:
    da.BeginTime = TimeSpan.Parse("0:0:2");
    我们可以把BeginTime设为负数,这时动画相当于提前到某个时刻开始。

3 设定自动返回(AutoReverse)

  • WPF动画提供了前进和后退功能。如果AutoReverse设为False,那么动画只向前进行,如果AutoReverse设为True,那么动画在完成前进的过程后,自动以相同的方式后退到初始状态。
    比如前面的例子:
  DoubleAnimation da = new DoubleAnimation();
  da.From = 50;
  da.To = 100;
  da.Duration = new Duration(TimeSpan.Parse("0:0:30"));
  da.AutoReverse = true;
  myButton.BeginAnimation(Button.WidthProperty, da);

按钮宽度从50变到100要用30秒,把da.AutoReverse之后,经过30秒,按钮的宽度又回到50,这就是AutoReserve的动画效果。

4 设定动画速度(SpeedRatio)

  • 当需要对两个以上对象进行类似动画时,可以微调同一个动画类,并把它们用在不同的对象上。
    例如,可以用同一个DoubleAnimation对椭圆的宽度进行动画,但把动画的速度增加一倍,那么,可以简单地用下面的C#来完成:
    da.SpeedRatio = 2;
    ellipse1.BeginAnimation(Ellipse.WidthProperty, da);
    把SpeedRatio设为2,然后把该动画加到椭圆上,运行该程序,可以看到,椭圆宽度动画的速度比按钮宽度快一倍。

5 加快和减慢动画(AccelarationRatio和DecelarationRatio)

  • 对于简单的情况,可以使用AccelarationRatio和DecelarationRatio来调整相关属性的变化速度。

6 设定动画的重复特性(RepeatBehavior)

  • 我们可以指定动画重复的次数,方法是设定RepeatBehavior。有两种方法来设定动画的重复特性,一种是设定重复的次数;第二种方法是设定动画重复到一定的时间

7 设定动画的终止状态(FillBehavior)

  • 那么动画结束的时候,相应的相关属性的值是保持动画结束时的值还是回到最初的状态?WPF使得这两种结果都有可能,它取决于FillBehavior的值。FillBehavior有两个值:HoldEnd和Stop。若FillBehavior设为HoldEnd(默认值),动画结束时,相关属性的值为动画结束时的值;若FillBehavior设为Stop,动画结束时,相关属性的值为动画开始时的值。

8 设定相关属性的动画范围(From和To)

  • WPF中的动画可以分为两类,一类是相关属性可以连续变化的,如Int16Animation、Int32Animation和DoubleAnimation等,另一类是不能连续变化的,如Bool、Char和String这些类型。对于可以连续变化的相关属性的动画,WPF提供设置动画的开始(From)和终止值(To),设定From和To后,WPF自动算出在某个特定的时刻,该相关属性的值。

9 设定相关属性的动画范围(By)

  • 设定相关属性动画范围的另一个方法是使用By属性,By的意思是在所动画原有值的基础上加(若By为正)或减(若By为负)By值。例如,汽车在画布上的初始位置Left为100,若把By设为500,那么,汽车的动画范围就在100~600:

10 设定IsAdditive和IsCumulative 属性

11 WPF动画的时间片类

控制动画的进程主要是安排某个事件在某个时刻发生,安排时间序列就是TimeLine类的工作。WPF提供了丰富的TimeLine类,前面已介绍了Timeline类,这是一个基类,从TimeLine类中派生出三个类,分别为:AnimationTimeLine、TimelineGroup和MediaTimeLine。而TimelineGroup类又派生出ParrellelTime和Storyboard,如图15-4所示。


图15-4 控制动画的时间片类
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容