zoukankan      html  css  js  c++  java
  • 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需要介绍的内容比较多,后面再单独写文章介绍。

     

    参考资料:

  • 相关阅读:
    移动开发 Native APP、Hybrid APP和Web APP介绍
    urllib与urllib2的学习总结(python2.7.X)
    fiddler及postman讲解
    接口测试基础
    UiAutomator2.0 和1.x 的区别
    adb shell am instrument 命令详解
    GT问题记录
    HDU 2492 Ping pong (树状数组)
    CF 567C Geometric Progression
    CF 545E Paths and Trees
  • 原文地址:https://www.cnblogs.com/TianFang/p/4055044.html
Copyright © 2011-2022 走看看