小白學(xué)qml 5

動(dòng)畫( Animations)

動(dòng)畫被?于屬性的改變。 ?個(gè)動(dòng)畫定義了屬性值改變的曲線, 將?個(gè)屬性值
變化從?個(gè)值過(guò)渡到另?個(gè)值。

//動(dòng)畫
    Image{
        id: imgAnim
        source: "qrc:/meng.png"

        //x屬性動(dòng)畫
        NumberAnimation on x {
            //移動(dòng)到300
            to: 300
            //持續(xù)4s
            duration: 4000
            //循環(huán)模式:無(wú)限
            loops: Animation.Infinite
        }
        //rotation屬性動(dòng)畫
        NumberAnimation on rotation {
            //旋轉(zhuǎn)到360
            to: 360
            //持續(xù)4s
            duration: 4000
            //循環(huán)模式:無(wú)限
            loops: Animation.Infinite
        }
    }
0_1527580541283_20180529_155456.gif

動(dòng)畫元素( Animation Elements)

常用類

  • PropertyAnimation( 屬性動(dòng)畫) - 使?屬性值改變播放的動(dòng)畫
  • NumberAnimation( 數(shù)字動(dòng)畫) - 使?數(shù)字改變播放的動(dòng)畫
  • ColorAnimation( 顏?動(dòng)畫) - 使?顏?改變播放的動(dòng)畫
  • RotationAnimation( 旋轉(zhuǎn)動(dòng)畫) - 使?旋轉(zhuǎn)改變播放的動(dòng)畫

特殊類

  • PauseAnimation( 停?動(dòng)畫) - 運(yùn)?暫停?個(gè)動(dòng)畫
  • SequentialAnimation( 順序動(dòng)畫) - 允許動(dòng)畫有序播放
  • ParallelAnimation( 并?動(dòng)畫) - 允許動(dòng)畫同時(shí)播放
  • AnchorAnimation( 錨定動(dòng)畫) - 使?錨定改變播放的動(dòng)畫
  • ParentAnimation( ?元素動(dòng)畫) - 使??對(duì)象改變播放的動(dòng)畫
  • SmotthedAnimation( 平滑動(dòng)畫) - 跟蹤?個(gè)平滑值播放的動(dòng)畫
  • SpringAnimation( 彈簧動(dòng)畫) - 跟蹤?個(gè)彈簧變換的值播放的動(dòng)畫
  • PathAnimation( 路徑動(dòng)畫) - 跟蹤?個(gè)元素對(duì)象的路徑的動(dòng)畫
  • Vector3dAnimation( 3D容器動(dòng)畫) - 使?QVector3d值改變播放的動(dòng)畫

應(yīng)?動(dòng)畫( Applying Animations)

  • 屬性動(dòng)畫 - 在元素完整加載后?動(dòng)運(yùn)?
  • 屬性動(dòng)作 - 當(dāng)屬性值改變時(shí)?動(dòng)運(yùn)?
  • 獨(dú)?運(yùn)?動(dòng)畫 - 使?start()函數(shù)明確指定運(yùn)?或者running屬性被設(shè)置為true

接下來(lái)我們舉個(gè)例子
有三個(gè)圖片,

  • 第一個(gè)圖片在程序啟動(dòng)后自動(dòng)跑到(300,0)的位置
  • 第二個(gè)圖片在點(diǎn)擊后跑到(300,0)的位置,使用Behavior on 檢測(cè)屬性變化
  • 第三個(gè)圖片在點(diǎn)擊后跑到(300,0)的位置,通過(guò)調(diào)用動(dòng)畫start方法
//動(dòng)畫
    Column{

        Image{
            id: imgAnim
            source: "qrc:/meng.png"

            //x屬性動(dòng)畫
            NumberAnimation on x {
                //移動(dòng)到300
                to: 300
                //持續(xù)2s
                duration: 2000
                //循環(huán)模式:無(wú)限
                loops: Animation.Infinite
            }
        }

        Image{
            id: imgAnim2
            source: "qrc:/meng.png"

            //x屬性動(dòng)畫
            Behavior on x {
                NumberAnimation{
                    //持續(xù)2s
                    duration: 2000
                }
            }
            MouseArea{
                anchors.fill: parent
                onClicked: imgAnim2.x = 300
            }
        }

        Image{
            id: imgAnim3
            source: "qrc:/meng.png"

            //x屬性動(dòng)畫
            NumberAnimation{
                id: animX
                //作用目標(biāo)
                target: imgAnim3
                //作用屬性: x
                property: "x"
                //開始點(diǎn)
                from: 0
                //結(jié)束點(diǎn)
                to: 300
                //持續(xù)2s
                duration: 2000
            }
            MouseArea{
                anchors.fill: parent
                onClicked: animX.start()
            }
        }
    }
0_1527581566626_20180529_161201.gif

緩沖曲線( Easing Curves)

屬性值的改變能夠通過(guò)?個(gè)動(dòng)畫來(lái)控制, 緩沖曲線屬性影響了?個(gè)屬性值改變的插值算法
詳細(xì)請(qǐng)看qt文檔

其中一個(gè)例子

NumberAnimation{
    //持續(xù)2s
    duration: 2000
    // 緩沖曲線
    easing.type: Easing.InOutBack
}
0_1527581947388_5ee89d9d-efa4-40f5-875d-f8a94fd9e7a5-image.png

0_1527581995732_20180529_161922.gif

動(dòng)畫分組( Grouped Animations)

如果你想執(zhí)行多個(gè)動(dòng)畫,那么你需要?jiǎng)赢嫹纸M

有兩種?法來(lái)分組: 平?與連續(xù)。 你可以使?SequentialAnimation( 連續(xù)動(dòng)畫) 和ParallelAnimation( 平?動(dòng)畫) 來(lái)實(shí)現(xiàn)它們, 它們作為動(dòng)畫的容器來(lái)包含其它的動(dòng)畫元素

  • ParallelAnimation( 平?動(dòng)畫)
//動(dòng)畫分組
    Image{
        id: imgAnimGroup
        source: "qrc:/meng.png"

        ParallelAnimation{
            id: paralAnim

            //屬性動(dòng)畫
            NumberAnimation{ target: imgAnimGroup; property: "x"; from: 0; to: 300; duration: 2000; easing.type: Easing.Linear; }
            //屬性動(dòng)畫
            NumberAnimation{ target: imgAnimGroup; property: "y"; from: 0; to: 300; duration: 2000; easing.type: Easing.Linear; }
        }

        MouseArea{
            anchors.fill: parent
            onClicked: paralAnim.start()
        }
    }
0_1527582499409_20180529_162747.gif
  • SequentialAnimation( 連續(xù)動(dòng)畫)
//動(dòng)畫分組
    Image{
        id: imgAnimGroup
        source: "qrc:/meng.png"

        SequentialAnimation{
            id: seqAnim

            //屬性動(dòng)畫
            NumberAnimation{ target: imgAnimGroup; property: "x"; from: 0; to: 300; duration: 2000; easing.type: Easing.Linear; }
            //屬性動(dòng)畫
            NumberAnimation{ target: imgAnimGroup; property: "y"; from: 0; to: 300; duration: 2000; easing.type: Easing.Linear; }
        }

        MouseArea{
            anchors.fill: parent
            onClicked: seqAnim.start()
        }
    }
0_1527582581310_20180529_162853.gif

源代碼

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Swift1> Swift和OC的區(qū)別1.1> Swift沒(méi)有地址/指針的概念1.2> 泛型1.3> 類型嚴(yán)謹(jǐn) 對(duì)...
    cosWriter閱讀 11,688評(píng)論 1 32
  • 本筆記的原文本鏈接 Property Animation Overview 屬性動(dòng)畫總覽 The property...
    Jaesoon閱讀 1,233評(píng)論 2 3
  • 選擇qi:是表達(dá)式 標(biāo)簽選擇器 類選擇器 屬性選擇器 繼承屬性: color,font,text-align,li...
    love2013閱讀 2,460評(píng)論 0 11
  • 想大事情,世界和平 從小做起,讀書心靜
    左繼強(qiáng)a閱讀 338評(píng)論 0 7
  • 如果說(shuō)愛是一杯茶,那么說(shuō)茶濃于水;如果說(shuō)愛是一片海洋,那么海洋深于溪流;如果說(shuō)愛是一座山,那么說(shuō)山高于平原;如果說(shuō)...
    黑河158范文敏閱讀 1,065評(píng)論 2 7

友情鏈接更多精彩內(nèi)容