天天看點

WPF中的動畫——(三)時間線(TimeLine)

原文: WPF中的動畫——(三)時間線(TimeLine) 時間線(TimeLine)表示時間段。 它提供的屬性可以讓控制該時間段的長度、開始時間、重複次數、該時間段内時間進度的快慢等等。在WPF中内置了如下幾種TimeLine:

  • AnimationTimeline  :前面已經介紹過,主要用于屬性的過渡,這種是最常見的動畫。
  • MediaTimeline:用于控制媒體檔案播放的時間線。
  • ParallelTimeline: ParallelTimeline  是一種可對其他時間線進行分組的時間線,可用于實作較複雜的動畫。
  • Storyboard  :一種特殊的  ,可為其包含的時間線提供對象和屬性目标資訊。在XAML中經常使用到它,在後面再專項介紹。
  • TimelineGroup:可包含其他  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需要介紹的内容比較多,後面再單獨寫文章介紹。

參考資料: