最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(五)之關(guān)鍵幀動(dòng)畫(huà)

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

WPF動(dòng)畫(huà)效果系列

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(一)之基本概念

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(二)之From/To/By 動(dòng)畫(huà)

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(三)之時(shí)間線(TimeLine)

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(四)之緩動(dòng)函數(shù)

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(五)之關(guān)鍵幀動(dòng)畫(huà)

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(六)之路徑動(dòng)畫(huà)

WPF實(shí)現(xiàn)動(dòng)畫(huà)效果(七)之演示圖板

正文

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

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

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

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

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

    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)鍵幀動(dòng)畫(huà)將每一個(gè)狀態(tài)制定為一個(gè)關(guān)鍵幀,關(guān)鍵幀動(dòng)畫(huà)時(shí)間線自動(dòng)連接各個(gè)關(guān)鍵幀,并計(jì)算過(guò)渡狀態(tài),完成動(dòng)畫(huà)。因此,某種程度上,我們也可以把From/To/By 動(dòng)畫(huà)看成是只有兩個(gè)狀態(tài)的特殊關(guān)鍵幀動(dòng)畫(huà)。

內(nèi)置的關(guān)鍵幀動(dòng)畫(huà)

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

<類(lèi)型> AnimationUsingKeyFrames

例如這兒使用的DoubleAnimationUsingKeyFrames,其它類(lèi)型請(qǐng)參看MSDN:關(guān)鍵幀動(dòng)畫(huà)概述,這里就不列舉了。

插值算法

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

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

  • 離散:兩個(gè)關(guān)鍵幀之間突變(到達(dá)時(shí)間點(diǎn)的時(shí)候硬切換,沒(méi)有過(guò)渡效果)

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

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

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

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

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

關(guān)鍵幀(IKeyFrame)

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

<類(lèi)型> KeyFrame

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

<插值算法><類(lèi)型> KeyFrame

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

關(guān)鍵幀的時(shí)間點(diǎn)(KeyTime)

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

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

  • 相對(duì)時(shí)間Percent:指定的是百分比,通過(guò)時(shí)間線的Duration來(lái)聯(lián)合決定對(duì)應(yīng)的時(shí)間點(diǎn)。通過(guò)函數(shù)KeyTime.FromPercent()創(chuàng)建。

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

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

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

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

參考資料:

關(guān)鍵幀動(dòng)畫(huà)概述

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

相關(guān)文章

  • C#獲取HTML文本的第一張圖片與截取內(nèi)容摘要示例代碼

    C#獲取HTML文本的第一張圖片與截取內(nèi)容摘要示例代碼

    在日常web開(kāi)發(fā)的時(shí)候,經(jīng)常會(huì)遇到需要獲取保存的HTML文本中的第一張圖片,并且截取內(nèi)容摘要的效果,例如織夢(mèng)的后臺(tái)添加完詳細(xì)內(nèi)容后就是自動(dòng)讀取內(nèi)容摘要,并保存第一張圖片為縮略圖,那么這篇文章跟大家分享下利用C#如何實(shí)現(xiàn),感興趣的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法

    C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法

    這篇文章主要介紹了C#基于正則表達(dá)式刪除字符串中數(shù)字或非數(shù)字的方法,涉及C#針對(duì)數(shù)字的簡(jiǎn)單正則匹配相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • c# 委托的本質(zhì)是什么

    c# 委托的本質(zhì)是什么

    這篇文章主要介紹了c# 委托的本質(zhì)是什么,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07
  • c# 實(shí)現(xiàn)窗體拖到屏幕邊緣自動(dòng)隱藏

    c# 實(shí)現(xiàn)窗體拖到屏幕邊緣自動(dòng)隱藏

    讓窗體拖到屏幕邊緣自動(dòng)隱藏的原理,通過(guò)Form1_LocationChanged的方法,當(dāng)窗體位置發(fā)生改變時(shí),判斷其是否在屏幕邊緣,在則隱藏。再通過(guò)Timer控件經(jīng)過(guò)指定時(shí)間判斷出鼠標(biāo)的位置,若鼠標(biāo)在屏幕左邊、上邊或右邊,這根據(jù)窗體的位置,調(diào)出窗體。
    2009-02-02
  • C#實(shí)現(xiàn)飛行棋(Winform)

    C#實(shí)現(xiàn)飛行棋(Winform)

    這篇文章主要為大家詳細(xì)介紹了基于Winform框架的飛行棋,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • c# 開(kāi)發(fā)語(yǔ)音識(shí)別程序

    c# 開(kāi)發(fā)語(yǔ)音識(shí)別程序

    這篇文章主要介紹了用c# 開(kāi)發(fā)語(yǔ)音識(shí)別程序,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-09-09
  • C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法

    C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法

    下面小編就為大家分享一篇C# 添加、修改以及刪除Excel迷你圖表的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2017-12-12
  • WPF實(shí)現(xiàn)播放RTSP視頻流

    WPF實(shí)現(xiàn)播放RTSP視頻流

    這篇文章主要為大家詳細(xì)介紹了WPF實(shí)現(xiàn)播放RTSP視頻流的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-01-01
  • Unity接入高德開(kāi)放API實(shí)現(xiàn)IP定位

    Unity接入高德開(kāi)放API實(shí)現(xiàn)IP定位

    這篇文章主要為大家介紹了Unity如何接入高德開(kāi)放API實(shí)現(xiàn)IP定位功能,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)或工作有一定參考價(jià)值,需要的可以參考一下
    2022-04-04
  • C# 使用模式匹配的好處總結(jié)

    C# 使用模式匹配的好處總結(jié)

    模式匹配的這些用途展示了它在簡(jiǎn)化代碼、提高可讀性和靈活處理不同類(lèi)型和條件的強(qiáng)大能力,隨著C#語(yǔ)言的發(fā)展,模式匹配的功能和應(yīng)用場(chǎng)景將會(huì)進(jìn)一步擴(kuò)展和深化,這篇文章主要介紹了C# 使用模式匹配的好處,需要的朋友可以參考下
    2024-07-07

最新評(píng)論

平塘县| 太湖县| 垣曲县| 江都市| 谷城县| 延吉市| 德清县| 土默特右旗| 县级市| 左云县| 孝感市| 班戈县| 常山县| 扎兰屯市| 海南省| 盐城市| 嵩明县| 清镇市| 新和县| 磐石市| 茌平县| 女性| 河北区| 白沙| 安图县| 泽普县| 安阳市| 隆化县| 遵义市| 海盐县| 高邑县| 漳州市| 盐山县| 缙云县| 岳普湖县| 平凉市| 平原县| 丹棱县| 鲜城| 故城县| 行唐县|