亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

WPF實現(xiàn)動畫效果(五)之關(guān)鍵幀動畫

 更新時間:2022年06月23日 11:18:00   作者:天方  
這篇文章介紹了WPF實現(xiàn)動畫效果之關(guān)鍵幀動畫,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

WPF動畫效果系列

WPF實現(xiàn)動畫效果(一)之基本概念

WPF實現(xiàn)動畫效果(二)之From/To/By 動畫

WPF實現(xiàn)動畫效果(三)之時間線(TimeLine)

WPF實現(xiàn)動畫效果(四)之緩動函數(shù)

WPF實現(xiàn)動畫效果(五)之關(guān)鍵幀動畫

WPF實現(xiàn)動畫效果(六)之路徑動畫

WPF實現(xiàn)動畫效果(七)之演示圖板

正文

與 From/To/By 動畫類似,關(guān)鍵幀動畫以也可以以動畫形式顯示目標屬性值。 和From/To/By 動畫不同的是, From/To/By 動畫只能控制在兩個狀態(tài)之間變化,而關(guān)鍵幀動畫則可以在多個狀態(tài)之間變化,例如,對于前面那個改變按鈕寬度的例子,如果我們要實現(xiàn)如下效果:

  • 在2秒時將寬度從 0變?yōu)?50

  • 在7秒時將寬度變?yōu)?0

  • 在9秒的時候?qū)⑵鋵挾茸優(yōu)?00

雖然我們可以用三個From/To/By 動畫組合實現(xiàn)類似效果,但是這樣一來麻煩,二來要感知動畫完成事件,不方便在XAML中使用。此時我們則可以使用關(guān)鍵幀動畫來快速實現(xiàn)這一過程。

    var widthAnimation = new DoubleAnimationUsingKeyFrames();
    var keyFrames = widthAnimation.KeyFrames;

    keyFrames.Add(new LinearDoubleKeyFrame(0, TimeSpan.FromSeconds(0)));
    keyFrames.Add(new LinearDoubleKeyFrame(350, TimeSpan.FromSeconds(2)));
    keyFrames.Add(new LinearDoubleKeyFrame(50, TimeSpan.FromSeconds(7)));
    keyFrames.Add(new LinearDoubleKeyFrame(200, TimeSpan.FromSeconds(9)));

    button.BeginAnimation(WidthProperty, widthAnimation);

可以看出,關(guān)鍵幀動畫將每一個狀態(tài)制定為一個關(guān)鍵幀,關(guān)鍵幀動畫時間線自動連接各個關(guān)鍵幀,并計算過渡狀態(tài),完成動畫。因此,某種程度上,我們也可以把From/To/By 動畫看成是只有兩個狀態(tài)的特殊關(guān)鍵幀動畫。

內(nèi)置的關(guān)鍵幀動畫

與 From/To/By 動畫一樣,在名字空間System.Windows.Media.Animation 下也內(nèi)置了大量關(guān)鍵幀動畫,它們的命名規(guī)則是:    

<類型> AnimationUsingKeyFrames

例如這兒使用的DoubleAnimationUsingKeyFrames,其它類型請參看MSDN:關(guān)鍵幀動畫概述,這里就不列舉了。

插值算法

在關(guān)鍵幀動畫中,我們除了定義關(guān)鍵幀外,還需要定義兩個關(guān)鍵幀之間的插值算法,這樣系統(tǒng)才能根據(jù)關(guān)鍵幀和插值算法生成中間狀態(tài)。WPF系統(tǒng)內(nèi)置四種插值算法:

  • 線性:兩個關(guān)鍵幀之間均勻變化

  • 離散:兩個關(guān)鍵幀之間突變(到達時間點的時候硬切換,沒有過渡效果)

  • 樣條:使用貝塞爾曲線實現(xiàn)更精確的加速和減速控制

  • 緩動:使用緩動函數(shù)曲線實現(xiàn)彈性變化

綜上來看,線性算法最常用,樣條算法能實現(xiàn)精準加速和減速控制。離散的這種硬切換的效果雖然看起來沒有什么動畫效果,但用于連接關(guān)鍵幀還是比較常用的。另外在一些硬過渡的地方也是能用到的,例如實現(xiàn)閃爍效果。

這幾種算法的具體效果這里就不做更多的介紹了,感興趣的朋友可以看看如下兩個鏈接中的描述和例子:

值得一提的是,并不是所有關(guān)鍵幀動畫都支持這幾種算法的,具體支持情況請參看MSDN:關(guān)鍵幀動畫概述。 當然,對于不支持的也是可以自己手動實現(xiàn)的。

關(guān)鍵幀(IKeyFrame)

前面已經(jīng)介紹過,一個關(guān)鍵幀主要有時間點和插值算法兩部分組成,在WPF中,不同的關(guān)鍵幀動畫對應著同的關(guān)鍵幀對象,它們都繼承自IKeyFrame接口,其命名規(guī)則為:

<類型> KeyFrame

例如,DoubleAnimationUsingKeyFrames對應的是DoubleKeyFrame,但由于這個類并沒有制定插值算法,它只是一個抽象基類,再加上插值算法后對應的關(guān)鍵幀類命名規(guī)范為:

<插值算法><類型> KeyFrame

例如,DoubleKeyFrame對應的幾種插值算法的關(guān)鍵幀為:LinearDoubleKeyFrame、DiscreteDoubleKeyFrame、SplineDoubleKeyFrame、EasingDoubleKeyFrame。這些關(guān)鍵幀對象使用的方式都比較類似,這里就不多介紹了。

關(guān)鍵幀的時間點(KeyTime)

關(guān)鍵幀的時間點由IKeyFrame.KeyTime屬性指定。它是一個KeyTime類型,它有如下幾種取值類型:

  • 時間點TimeSpan:靠TimeSpan直接決定時間點,可以通過函數(shù)KeyTime.FromTimeSpan()創(chuàng)建,也可以直接用TimeSpan隱式轉(zhuǎn)換。

  • 相對時間Percent:指定的是百分比,通過時間線的Duration來聯(lián)合決定對應的時間點。通過函數(shù)KeyTime.FromPercent()創(chuàng)建。

  • 特殊值Uniform:時間線平均分布每個關(guān)鍵幀所需要的時間。通過函數(shù)KeyTime.Uniform創(chuàng)建。

  • 特殊值Paced:間線按固定的幀率分配所需時間,這種情況下,變化大的關(guān)鍵幀分配時間長,變化小的關(guān)鍵幀分配時間段。通過函數(shù)KeyTime.Paced創(chuàng)建。

用代碼創(chuàng)建的方式這兒就不舉例了,這里就僅僅列舉一下如何在XAML中表示這幾種時間:

    <LinearDoubleKeyFrame Value="100" KeyTime="0:0:3" />
    <LinearDoubleKeyFrame Value="100" KeyTime="30%" />
    <LinearDoubleKeyFrame Value="100" KeyTime="Uniform" />
    <LinearDoubleKeyFrame Value="100" KeyTime="Paced" />

參考資料:

關(guān)鍵幀動畫概述

到此這篇關(guān)于WPF實現(xiàn)動畫效果之關(guān)鍵幀動畫的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • C#實現(xiàn)將程序運行信息寫入日志的方法

    C#實現(xiàn)將程序運行信息寫入日志的方法

    這篇文章主要介紹了C#實現(xiàn)將程序運行信息寫入日志的方法,可實現(xiàn)將程序運行信息寫入日志并存儲在Debug目錄下的"/Log/PRG"下的功能,涉及C#針對日志的相關(guān)寫入技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-08-08
  • C#實現(xiàn)導入CSV文件到Excel工作簿的方法

    C#實現(xiàn)導入CSV文件到Excel工作簿的方法

    這篇文章主要介紹了C#實現(xiàn)導入CSV文件到Excel工作簿的方法,涉及C#針對office組件的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06
  • C# 調(diào)用騰訊即時通信 IM的示例

    C# 調(diào)用騰訊即時通信 IM的示例

    這篇文章主要介紹了C# 調(diào)用騰訊即時通信 IM的示例,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11
  • 詳解c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉(zhuǎn)換

    詳解c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉(zhuǎn)換

    本文詳細講解了c#中Array,ArrayList與List<T>的區(qū)別、共性與相互轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-12-12
  • C#中的const和readonly關(guān)鍵字詳解

    C#中的const和readonly關(guān)鍵字詳解

    本文詳細講解了C#中的const和readonly關(guān)鍵字,文中通過示例代碼介紹的非常詳細。對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • 利用C#開發(fā)瀏覽器擴展的全過程記錄

    利用C#開發(fā)瀏覽器擴展的全過程記錄

    做web開發(fā)的同學,經(jīng)常會用到各種chrome瀏覽器插件,那么我們寄幾怎么開發(fā)一個插件呢(其實是瀏覽器擴展)?這篇文章主要給大家介紹了關(guān)于利用C#開發(fā)瀏覽器擴展的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • Unity3D實現(xiàn)鼠標控制視角轉(zhuǎn)動

    Unity3D實現(xiàn)鼠標控制視角轉(zhuǎn)動

    這篇文章主要為大家詳細介紹了Unity3D實現(xiàn)鼠標控制視角轉(zhuǎn)動,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-02-02
  • C#二叉搜索樹插入算法實例分析

    C#二叉搜索樹插入算法實例分析

    這篇文章主要介紹了C#二叉搜索樹插入算法,實例分析了C#二叉樹操作的相關(guān)技巧,需要的朋友可以參考下
    2015-04-04
  • C#設(shè)計模式之職責鏈模式示例詳解

    C#設(shè)計模式之職責鏈模式示例詳解

    這篇文章主要給大家介紹了關(guān)于C#設(shè)計模式之職責鏈模式的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • 一文帶你吃透C#中面向?qū)ο蟮南嚓P(guān)知識

    一文帶你吃透C#中面向?qū)ο蟮南嚓P(guān)知識

    這篇文章主要為大家詳細介紹了C#中面向?qū)ο蟮南嚓P(guān)知識,文中的示例代碼講解詳細,對我們學習C#有一定的幫助,需要的小伙伴可以參考一下
    2023-02-02

最新評論