色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

QML中的動畫設計,太“難”了

倩倩 ? 來源:嵌入式小生 ? 作者:嵌入式小生 ? 2022-09-09 10:16 ? 次閱讀


在QML中,提供了很多用于設計炫酷動畫的基本類型,如下圖所示:

ddafd6c6-2fe3-11ed-ba43-dac502259ad0.png

本文將總結QML中的動畫類型,以及一些類型的基本使用方法。

一、Animation基本動畫類型

首先,肯定是Animation類型,該類型是所有動畫類型的基本類型,注意:我們是不能在qml文檔中直接使用該類型的,該類型是一個基本類型,為不同的動畫方式提供公用的屬性和方法(可以理解成在C++中的抽象基類))。

Animation類型提供了四個屬性:

(1)alwaysRunToEnd:該屬性接收布爾類型的參數。該屬性保存動畫是否運行到完成才停止。當loops屬性被設置時,這個屬性是最有用的,因為動畫將正常播放結束,但不會重新啟動。

(2)loops:該屬性接收int類型的參數。該屬性保存播放動畫的次數。默認是1,如果該屬性設置為Animation.Infinite時,動畫將不斷重復,直到顯式停止(將running屬性設置為false,或者調用stop()方法)。

(3)paused:該屬性接布爾類型的參數。該屬性標識動畫是否暫停。設置paused屬性可以控制動畫是否暫停。在JavaScript中使用pause()和resume()方法也可以強制暫停和恢復動畫。

(4)running:該屬性接收布爾類型的參數。該屬性標識動畫當前是否正在運行。

Animation類型提供三個信號

(1)finished():該信號在動畫自然完成時發出。注意:當run被設置為false時,不會觸發該信號;loops屬性被設置為Animation.Infinite的動畫也不會觸發該信號。

(2)started():這個信號在動畫開始時發出。只有頂級、獨立的動畫才會觸發該信號。過渡中的動畫或動畫組中的動畫不會觸發該信號。

(3)stopped():當動畫結束時發出該信號。動畫可能已手動停止,或者可能已運行完成。

Animation類型提供六種方法:

(1)complete():停止動畫,跳轉到最終屬性值。如果動畫沒有運行,調用此方法將沒有效果。在調用complete()之后,running屬性將被設置為false。與stop()不同,complete()會立即將動畫快進到結束位置。例如下列代碼:

Rectangle{
NumberAnimationonx{from:0;to:100;duration:500}
}

上面代碼中,使用NumberAnimation類型動畫Rectangle的x屬性值,動畫范圍值為:0~100。當我們在250ms時調用stop()函數,x屬性值將是50;如果調用complete(),x屬性值將為100。

(2)pause():該方法將暫停動畫。如果動畫已經暫?;蛘咛幱谖催\行狀態,調用該方法將沒有效果。在調用pause()之后,pause屬性將被設置為true。

(3)restart():該方法將重新開始動畫。該方法理解成是stop和start的組合:先調用stop()停止動畫,然后再調用start()開始動畫。

(4)resume():恢復暫停的動畫。如果動畫沒有被暫?;驔]有運行,調用此方法將沒有效果。在調用resume()之后,pause屬性將被設置為false。

(5)start():該方法將開始動畫。如果動畫已經運行了,調用該方法將沒有效果。在調用start()之后,running屬性將被設置為true。

(6)stop():停止動畫。如果動畫沒有運行,調用該方法將不起作用。在調用stop()之后,running和paused屬性都將被設置為false。通常情況下,stop()會立即停止動畫,并且動畫不會對屬性值產生進一步的影響。在以下代碼中:

Rectangle{
NumberAnimationonx{from:0;to:100;duration:500}
}

假如我們在250ms時停止動畫,x屬性的值將為50。但如果我們設置了alwaysRunToEnd屬性,running屬性會立即變為false,但是動畫將繼續運行,直到動畫到完成位置才停止。

二、QML中的動畫類型

(2-1)動畫和轉場類型

在QML用于描述動畫和轉場的類型如下表所示:

序號 名稱 解釋
1 Transition 表示狀態變化時的動畫轉換
2 SequentialAnimation 串行運行動畫
3 ParallelAnimation 并行運行動畫
4 Behavior 為屬性更改指定默認動畫
5 PropertyAction 設置動畫期間的屬性更改
6 PauseAnimation 用于在動畫過程中暫停動畫
7 SmoothedAnimation 該類型允許屬性平滑的跟蹤值
8 SpringAnimation 允許屬性以類似彈簧的運動方式跟蹤一個值
9 ScriptAction 在動畫過程中運行腳本

(2-2)基于數值的屬性動畫類型

QML中基于數值的動畫類型如下表所示:

序號 名稱 解釋
1 AnchorAnimation Anchor變化動畫
2 NumberAnimation 數值改變動畫
3 ColorAnimation 顏色改變動畫
4 ParentAnimation 父值變化動畫
5 PathAnimation 路徑改變動畫
6 PropertyAnimation 屬性改變動畫
7 RotationAnimation 旋轉值改變動畫
8 Vector3dAnimation QVector3d值改變動畫

四、設計動畫

在上述第一小節中,描述了QML中動畫的基本類型:Animation,該類型是所有動畫的基本類型,我們已經知道,在實際設計動畫時是不能直接使用該類型的,需要去使用它的派生類型。

當我們在創建動畫時,需要為對象的屬性使用適當的動畫類型,并根據所需的行為類型選擇動畫方式。

設計動畫,我們應該考慮如何為對象添加動畫,總結起來,有以下四種方法:

(4-1)直接屬性動畫

該種方法通過動畫對象的屬性值來創建,隨著時間的推移逐漸改變屬性值。屬性動畫通過在屬性值變化之間插入值來平滑的移動。屬性動畫提供了時間控制,并允許通過緩動曲線進行多種插值。例如下列代碼:

Rectangle{
id:colorRectangle
width:75;
height:75
color:"blue"
opacity:1.0

MouseArea{
anchors.fill:parent
onClicked:{
animateColor.start()
}
}

PropertyAnimation{
id:animateColor;
target:colorRectangle;
properties:"color";
to:"red";
duration:1000
}
}

(4-2)預定義目標和屬性

在直接屬性動畫方法中,PropertyAnimation類型對象需要指定特定的目標和屬性值,用于指定想要動畫的對象和屬性。除此之外,我們還可以使用 on 語句來設計動畫,該語句將直接指定將要動畫的屬性。例如下列代碼:

importQtQuick2.0

Rectangle{
id:rect
width:100;height:100
color:"red"

PropertyAnimationonx{to:100}
PropertyAnimationony{to:100}
}

上述代碼中,使用PropertyAnimation指定了在rect代表矩形的x和y屬性上的動畫。

預定義目標和屬性也可以在分組動畫中使用,用于確保組內所有動畫都應用到相同的屬性上。例如下列代碼:

Rectangle{
width:100;height:100
color:"yellow"

SequentialAnimationoncolor{
ColorAnimation{to:"red";duration:1000}
ColorAnimation{to:"blue";duration:1000}
}
}

上述代碼中,將以串行方式動畫Rectangle的color屬性。顏色動畫使用ColorAnimation類型來描述,在上述代碼中,Rectangle的顏色將從黃色變成紅色,然后變成藍色。

(4-3)狀態轉換動畫

在Qt Quick中,States是Item的屬性配置項,屬性可能有不同的值來反映不同的狀態。狀態變化會帶來屬性變化,這時候我們可以平滑過渡屬性變化,從而可以形成動畫效果。

QML中,Transition用于包含動畫類型,來表示狀態變化引起的屬性變化。

例如:假設按鈕可能有兩種狀態,當用戶單擊按鈕時為按下狀態,當用戶釋放按鈕時為釋放狀態。因此,我們可以為每個狀態分配不同的屬性配置。然后使用一個Transition將使從被按下狀態到被釋放狀態的變化產生動畫效果。同樣地,在從釋放狀態到按下狀態的變化過程中也會有一個動畫。代碼如下:

Rectangle{
width:75;
height:75
id:button
state:"RELEASED"
radius:5

MouseArea{
anchors.fill:parent
onPressed:button.state="PRESSED"
onReleased:button.state="RELEASED"
}

states:[
State{
name:"PRESSED"
PropertyChanges{target:button;color:"blue"}
},
State{
name:"RELEASED"
PropertyChanges{target:button;color:"red"}
}
]

transitions:[
Transition{
from:"PRESSED"
to:"RELEASED"
ColorAnimation{target:button;duration:100}
},
Transition{
from:"RELEASED"
to:"PRESSED"
ColorAnimation{target:button;duration:100}
}
]
}

上述代碼中,是由狀態和狀態轉換動畫組合完成的,首先使用State定義矩形的兩種狀態:PRESSED、RELEASE,在這兩種狀態下分別定義兩種顏色。然后使用Transition定義兩種狀態轉換動畫:(1)從PRESSED到RELEASE狀態轉換動畫。(2)從RELEASE到PRESSED狀態轉換動畫。在MouseArea類型鼠標事件處理程序中指定鼠標操作對應的矩態:當鼠標按鈕按下時,button為PRESSED狀態;當鼠標按鈕釋放時,button為RELEASE狀態。運行效果如下圖所示:

ddf9abde-2fe3-11ed-ba43-dac502259ad0.gif

tofrom屬性綁定到狀態名稱,將把特定的轉換分配給狀態更改。將to屬性設置為通配符“*”,表示轉換適用于任何狀態更改:

transitions:
Transition{
to:"*"
ColorAnimation{target:button;duration:100}
}

(4-4)使用Behavior定義默認的屬性動畫

默認的屬性動畫是使用Behavior設置的。在Behavior類型中聲明的動畫應用于屬性,并使屬性值的變化發生動畫。Behavior類型有一個enabled屬性來特意啟用或禁用行為動畫。當屬性值發生改變時,將按照Behavior指定的動畫進行動畫改變。

例如下列代碼:

Rectangle{
id:rect
width:100;
height:100
color:"red"

Behavioronwidth{
NumberAnimation{duration:1000}
}

Behavioronx
{
NumberAnimation{duration:1000}
}

Behavioroncolor{
ColorAnimation{duration:1000}
}

Behavioronradius
{
NumberAnimation{duration:1000}
}

MouseArea{
anchors.fill:parent
onClicked:{
rect.width=50;
rect.x=100
rect.color="blue";
rect.radius=50;
}
}
}

上述代碼中,使用Behavior為Rectangle的width、x、color和radius屬性指定了默認動畫。然后定義了一個MouseArea用于接收鼠標事件,在鼠標的點擊事件處理程序中,改變width、x、color和radius屬性的值,那么該Rectangle將按照默認指定的動畫來更改屬性值。效果如下:de187adc-2fe3-11ed-ba43-dac502259ad0.gif

Behavior on 是將行為動畫分配到屬性上的一種快捷方法。

五、并行或串行播放動畫

動畫可以并行運行,也可以串行運行。并行動畫會同時播放一組動畫,而串行動畫會依次播放一組動畫。在SequentialAnimationParallelAnimation中分組的動畫會按順序或并行播放動畫。例如下列代碼:

Rectangle{
id:banner
width:150;
height:100;
border.color:"black"
color:"lightblue"

Column{
anchors.centerIn:parent
Text{
id:text1
text:"iriczhao-01"
opacity:0.01
color:"red"
}
Text{
id:text2
text:"iriczhao-02"
opacity:0.01
color:"white"
}
Text{
id:text3
text:"iriczhao-03"
opacity:0.01
color:"blue"
}
spacing:10
}

MouseArea{
anchors.fill:parent
onPressed:playTextBanner.start()
}

SequentialAnimation{
id:playTextBanner
running:false
NumberAnimation{target:text1;property:"opacity";to:1.0;duration:200}
NumberAnimation{target:text2;property:"opacity";to:1.0;duration:200}
NumberAnimation{target:text3;property:"opacity";to:1.0;duration:200}
}
}

上述代碼首先定義了三個本文顯示類型,分別顯示不同的文本,然后定義了MouseArea類型用于接收鼠標的點擊事件,該鼠標點擊區域為長為150,寬度為100的Rectangle。還設計了一個名為playTextBanner的串行動畫。當我們的鼠標在id為banner的矩形區域內點擊的時候,將會執行這個串行動畫。在串行動畫中,使用NumberAnimation數值動畫類型改變三個Text類型文本的“opacity”屬性值,從而實現三個文本的依次顯示。效果如下:

de403928-2fe3-11ed-ba43-dac502259ad0.gif

一旦單個動畫被放置到SequentialAnimation或ParallelAnimation中,它們就不能再獨立的啟動和停止。串行或并行動畫必須以一個組的方式啟動和停止。

SequentialAnimation類型對于播放Transition動畫也很有用,因為動畫是在Transition內部并行播放的。

五、尾

本文主要記錄了關于QML動畫的基本類型,以及使用這些類型設計動畫的基本方法。State、TransitionAnimation派生類型是設計QML動畫的必須元素。高版本的Qt支持使用時間線和關鍵幀來創建動畫,這一部分內容就在后續文中寫了。

在實際使用中,我們不用手動去編寫動畫相關的代碼,可以直接使用Qt Design Studio去設計即可,該工具會自動生成動畫相關的代碼,我們只需要能看懂生成的代碼就可以了,開發效率是非常高的。

審核編輯 :李倩


聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 函數
    +關注

    關注

    3

    文章

    4338

    瀏覽量

    62734
  • C++
    C++
    +關注

    關注

    22

    文章

    2111

    瀏覽量

    73703
  • 動畫
    +關注

    關注

    0

    文章

    20

    瀏覽量

    8533

原文標題:QML中的動畫設計,太“難”了

文章出處:【微信號:嵌入式小生,微信公眾號:嵌入式小生】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    關于赫茲波的介紹

    在上面的圖表,光波和無線電波是相同的電磁波,被應用于社會的各個領域。 另一方面,赫茲波還沒有被應用。然而,赫茲波具有以下有吸引力的特性和各領域的預期是很有用的。 赫茲波的性質
    的頭像 發表于 09-29 06:18 ?257次閱讀
    關于<b class='flag-5'>太</b>赫茲波的介紹

    LM555QML定時器數據表

    電子發燒友網站提供《LM555QML定時器數據表.pdf》資料免費下載
    發表于 08-20 09:29 ?0次下載
    LM555<b class='flag-5'>QML</b>定時器數據表

    嵌入式QT常見開發方式有哪些?

    功能。 3.Qt Quick/QML開發: 利用QML語言和Qt Quick框架來創建流暢且動畫豐富的用戶界面,QML是一種聲明性語言,適合于快速原型開發和移動設備、嵌入式系統的現代
    發表于 08-12 10:05

    env工具生成的mdk工程 ,頭文件路徑怎么解決?

    使用env工具 生成的mdk工程 的 頭文件路徑
    發表于 07-05 08:13

    LM748QML運算放大器數據表

    電子發燒友網站提供《LM748QML運算放大器數據表.pdf》資料免費下載
    發表于 06-15 10:49 ?0次下載
    LM748<b class='flag-5'>QML</b>運算放大器數據表

    LM7171QML,LM7171QML-SP高速電壓反饋放大器數據表

    電子發燒友網站提供《LM7171QML,LM7171QML-SP高速電壓反饋放大器數據表.pdf》資料免費下載
    發表于 06-15 10:17 ?0次下載
    LM7171<b class='flag-5'>QML</b>,LM7171<b class='flag-5'>QML</b>-SP高速電壓反饋放大器數據表

    LM6172QML雙通道高速電壓反饋放大器數據表

    電子發燒友網站提供《LM6172QML雙通道高速電壓反饋放大器數據表.pdf》資料免費下載
    發表于 06-14 09:24 ?0次下載
    LM6172<b class='flag-5'>QML</b>雙通道高速電壓反饋放大器數據表

    LM118QML運算放大器數據表

    電子發燒友網站提供《LM118QML運算放大器數據表.pdf》資料免費下載
    發表于 06-06 10:26 ?0次下載
    LM118<b class='flag-5'>QML</b>運算放大器數據表

    HarmonyOS開發案例:【轉場動畫

    在本教程,我們將會通過一個簡單的樣例,學習如何基于ArkTS的聲明式開發范式開發轉場動畫。其中包含頁面間轉場、組件內轉場以及共享元素轉場。
    的頭像 發表于 05-06 15:42 ?1075次閱讀
    HarmonyOS開發案例:【轉場<b class='flag-5'>動畫</b>】

    HarmonyOS開發案例:【自定義下拉刷新動畫

    主要介紹組件動畫animation屬性設置。當組件的某些通用屬性變化時,可以通過屬性動畫實現漸變效果,提升用戶體驗。
    的頭像 發表于 04-29 16:06 ?983次閱讀
    HarmonyOS開發案例:【自定義下拉刷新<b class='flag-5'>動畫</b>】

    OpenHarmony實戰開發-如何實現組件動畫。

    ArkUI為組件提供通用的屬性動畫和轉場動畫能力的同時,還為一些組件提供默認的動畫效果。例如,List的滑動動效,Button的點擊動效
    的頭像 發表于 04-28 15:49 ?644次閱讀
    OpenHarmony實戰開發-如何實現組件<b class='flag-5'>動畫</b>。

    HarmonyOS開發案例:【動畫

    使用動畫樣式,實現幾種常見動畫效果:平移、旋轉、縮放以及透明度變化。
    的頭像 發表于 04-25 15:13 ?485次閱讀
    HarmonyOS開發案例:【<b class='flag-5'>動畫</b>】

    5.0V參考二極管LM136A-5.0QML LM136-5.0QML數據表

    電子發燒友網站提供《5.0V參考二極管LM136A-5.0QML LM136-5.0QML數據表.pdf》資料免費下載
    發表于 04-08 09:27 ?0次下載
    5.0V參考二極管LM136A-5.0<b class='flag-5'>QML</b> LM136-5.0<b class='flag-5'>QML</b>數據表

    3 端子可調節負穩壓器LM137QML數據表

    電子發燒友網站提供《3 端子可調節負穩壓器LM137QML數據表.pdf》資料免費下載
    發表于 04-07 14:22 ?0次下載
    3 端子可調節負穩壓器LM137<b class='flag-5'>QML</b>數據表

    鴻蒙開發之發動畫

    FPS(Frame Per Second),即每秒的動畫幀數,幀率越高則動畫就會越流暢。 ArkUI,產生動畫的方式是改變屬性值且指定動畫
    的頭像 發表于 02-01 15:25 ?647次閱讀
    鴻蒙開發之發<b class='flag-5'>動畫</b>篇
    主站蜘蛛池模板: 3D漫画H精品啪啪无码| 国产伊人自拍| 尿孔 调教 扩张| qvod电影在线观看| 玩50岁四川熟女大白屁股直播| 国产区在线不卡视频观看| 亚洲精品免费视频| 蜜芽手机在线观看| 国产扒开美女双腿屁股流白浆| 亚洲黄视频在线观看| 男的插曲女的下面免费APP| 国产99对白在线播放| 一本色道久久综合亚洲精品蜜桃冫 | 狼好色有你好看| 成人在线视频播放| 亚洲精品无码午夜福利在线观看| 秘密教学93话恩爱久等了免费 | 老师xxxx69动漫| 国产成人综合95精品视频免费| 亚洲午夜精品A片久久软件| 欧美乱妇15p图| 含羞草影院AE在线观看| old老男人野外树林tv| 亚洲人成影院在线播放| 青青视频国产依人在线| 精品一区二区三区免费毛片| 纯肉高H放荡受BL文库| 伊人久久大香线蕉综合色啪| 世界第一黄暴漫画家| 美女白虎穴| 狠狠干福利视频| 国产99小视频| chinesevideos原创麻豆| 亚洲综合色在线视频久| 肉多荤文高h羞耻校园| 麻豆AV蜜桃AV久久| 果冻传媒在线播放| 国产黄大片在线视频| WWW污污污抽搐喷潮COM| 2020年国产精品午夜福利在线观看| 亚洲高清视频免费|