ズームイン!

Qt ロゴをクリックしたときに、そのロゴにズームインしていくような動きを QtQuick で作ってみました。

import QtQuick 2.0

Item {
    id: root
    width: 360
    height: 360

    property int count: 4

    Grid {
        columns: root.count

        Repeater {
            model: root.count * root.count

            MouseArea {
                id: me
                width: root.width / root.count
                height: root.width / root.count

                Image {
                    anchors.fill: parent
                    source: 'http://qt5.jp/upload/29/logo_qt.png'
                    smooth: true
                    fillMode: Image.PreserveAspectFit
                }
                onClicked: {
                    if (root.to) {
                        root.to = null
                    } else {
                        root.to = me
                    }
                }
            }
        }
    }

    property Item to

    transform: [
        Scale { id: rootScale }
        , Translate { id: rootTranslate }
    ]

    states: State {
        when: root.to !== null
        PropertyChanges {
            target: rootTranslate
            x: -root.to.x * rootScale.xScale
            y: -root.to.y * rootScale.yScale
        }
        PropertyChanges {
            target: rootScale
            xScale: root.width / root.to.width
            yScale: root.height / root.to.height
        }
    }

    transitions: Transition {
        NumberAnimation {
            properties: 'x, y, xScale, yScale'
            easing.type: Easing.InExpo
        }
    }
}

Item 要素の transform プロパティ を使ってスケールと位置を変えています。アニメーションの easing.type によって結構雰囲気が変わりますね。

Rotation にも対応するとさらに面白い動きになると思います。