• WPF中的动画——(三)时间线(TimeLine)


    时间线(TimeLine)表示时间段。 它提供的属性可以让控制该时间段的长度、开始时间、重复次数、该时间段内时间进度的快慢等等。在WPF中内置了如下几种TimeLine:

    • AnimationTimeline :前面已经介绍过,主要用于属性的过渡,这种是最常见的动画。
    • MediaTimeline:用于控制媒体文件播放的时间线。
    • ParallelTimeline:ParallelTimeline 是一种可对其他时间线进行分组的时间线,可用于实现较复杂的动画。
    • Storyboard :一种特殊的 ParallelTimeline,可为其包含的时间线提供对象和属性目标信息。在XAML中经常使用到它,在后面再专项介绍。
    • TimelineGroup:可包含其他 Timeline 对象的 Timeline 对象的抽象类。

    常用属性:

    • Duration: 动画播放时间长度
    • RepeatBehavior: 重复行为(重复次数)
    • FillBehavior: 动画结束后的行为(保持动画的结束状态或恢复到初始状态)
    • AutoReverse: 按相反的顺序重复播放动画
    • SpeedRatio: 动画播放速率(用于加速或减速播放)
    • BeginTime: 动画播放的起始时间

    时间线控制:

    到目前为止,我们虽然能创建并执行动画,但仅仅能通过UIElement. BeginAnimation执行开始动画,还无法对动画进行交互控制。在WPF中,还提供了一系列对时间线的控制操作,如:开始、停止、暂停等。它们是通过Clock对象的Controller属性来进行的。下面就是一个简单的示例:

        var widthAnimation = new DoubleAnimation()
        {
            From = 0,
            To = 320,
            Duration = TimeSpan.FromSeconds(5),
        };

        var clock = widthAnimation.CreateClock();
        button.ApplyAnimationClock(WidthProperty, clock);

        await Task.Delay(3000);
        clock.Controller.Pause();

    从这个代码中可以看出,控制时间线的一般步骤如下:

    1. 通过CreateClock函数创建时钟对象Clock
    2. 通过UIElement. ApplyAnimationClock函数启用支持时钟控制的动画
    3. 使用Clock. Controller的方法控制动画

    更加详尽的例子可以参看MSDN文档:以交互方式控制时钟

    除了在Controller中提供了交互方法以为,Clock对象还提供了一系列属性和事件方便我们的获取状态,常见的有:

    • CurrentProgress    当前进度
    • CurrentState    当前状态
    • CurrentTime    当前播放时间
    • IsPaused    是否处于暂停状态
    • NaturalDuration    动画持续时间

    也提供了一系列事件来主动通知状态的变更,常用的事件为:

    • Completed:动画结束时的通知
    • CurrentGlobalSpeedInvalidated 播放速率变化时的通知,
    • CurrentStateInvalidated 状态变化时的通知
    • CurrentTimeInvalidated 播放时间变化时的通知
    • RemoveRequested 动画移除时候的通知

    这几个事件在TimeLine对象中也是有的,这样,在不使用Clock对象的时候也可以或者这些状态的变化。 如果想更加收入的理解计时系统的工作方式,可以看看动画和计时系统概述一文。

    另外,有的特殊的TimeLine对象,如Storyboard本身就封装了动画的控制相关内容,可以直接对动画进行控制。关于Storyboard需要介绍的内容比较多,后面再单独写文章介绍。

     

    参考资料:

  • 相关阅读:
    ASP.NET HTTP模块和处理程序(5)(转载)
    充分利用ASP.NET的三种缓存提高站点性能(转载)
    LINQ体验(4)——LINQ简介和LINQ to SQL语句之Where
    理解DataSet的数据缓存机制
    在ASP.NET中实现AJAX(一)
    ASP.NET HTTP模块和处理程序(2)(转载)
    ASP.NET HTTP模块和处理程序(1)(转载)
    aspx页面中文汉字显示为乱码
    贫血还是充血?(转载)
    ASP.NET HTTP模块和处理程序(3)(转载)
  • 原文地址:https://www.cnblogs.com/TianFang/p/4055044.html
Copyright © 2020-2023  润新知