使用例 - QMLにおけるアニメーション
Qt Quickにはプロパティをアニメーションさせる機能があります。プロパティをアニメーションさせることで、プロパティの値をすぐに目標値に変更するのではなく、中間値を移動させることができます。アイテムの位置をアニメーションさせるには、アイテムの位置を制御するプロパティ、例えばxとyをアニメーションさせ、アイテムの位置がターゲット位置へ向かう途中でフレームごとに変化するようにします。
流動的なUI
QMLは、流体UIの作成を容易にするように設計されています。これは、UIコンポーネントが突然現れたり、消えたり、ジャンプしたりするのではなく、アニメーションするユーザーインターフェースのことです。Qt Quick では、UI コンポーネントを新しい位置に即座に出現させるのではなく、アニメーションで移動させるための2つの簡単な方法を提供しています。
状態と遷移
Qt Quick では、State オブジェクトでさまざまな UI ステートを宣言できます。これらの状態は、基本状態からのプロパティの変化で構成され、UIロジックを整理するのに便利な方法です。トランジションは、アイテムに関連付けることができるオブジェクトで、ステートの変更によってプロパティが変化したときに、どのようにアニメーションするかを定義します。
アイテムのステートとトランジションは、Item::states とItem::transitions プロパティで宣言できます。状態は、アイテムの状態リストプロパティ(通常はコンポーネントのルートアイテム)の中で宣言されます。同じアイテムに定義されたトランジションは、ステートの変化をアニメートするために使用されます。以下に例を示します。
Item { id: container width: 320 height: 120 Rectangle { id: rect color: "red" width: 120 height: 120 TapHandler { onTapped: container.state === '' ? container.state = 'other' : container.state = '' } } states: [ // This adds a second state to the container where the rectangle is farther to the right State { name: "other" PropertyChanges { target: rect x: 200 } } ] transitions: [ // This adds a transition that defaults to applying to all state changes Transition { // This applies a default NumberAnimation to any changes a state change makes to x or y properties NumberAnimation { properties: "x,y" } } ] }
プロパティの変化のアニメーション
ビヘイビアを使用して、プロパティの変更時に使用するアニメーションを指定できます。これは、ソースに関係なく、すべての変更に適用されます。次の例では、ビヘイビアを使用して、ボタンがスクリーン上を動き回る様子をアニメーション化しています。
Item { width: 320 height: 120 Rectangle { color: "green" width: 120 height: 120 // This is the behavior, and it applies a NumberAnimation to any attempt to set the x property Behavior on x { NumberAnimation { //This specifies how long the animation takes duration: 600 //This selects an easing curve to interpolate with, the default is Easing.Linear easing.type: Easing.OutBounce } } TapHandler { onTapped: parent.x == 0 ? parent.x = 200 : parent.x = 0 } } }
その他のアニメーション
すべてのアニメーションが、特定のプロパティまたはステートに結びつけられなくてはならないわけではありません。より一般的なアニメーションを作成し、アニメーションの内部でターゲットとなるアイテムやプロパティを指定することもできます。以下に、さまざまなアニメーションの例を示します:
Item { width: 320 height: 120 Rectangle { color: "blue" width: 120 height: 120 // By setting this SequentialAnimation on x, it and animations within it will automatically animate // the x property of this element SequentialAnimation on x { id: xAnim // Animations on properties start running by default running: false loops: Animation.Infinite // The animation is set to loop indefinitely NumberAnimation { from: 0; to: 200; duration: 500; easing.type: Easing.InOutQuad } NumberAnimation { from: 200; to: 0; duration: 500; easing.type: Easing.InOutQuad } PauseAnimation { duration: 250 } // This puts a bit of time between the loop } TapHandler { // The animation starts running when you click within the rectangle onTapped: xAnim.running = true } } } Item { width: 320 height: 120 Rectangle { id: rectangle color: "yellow" width: 120 height: 120 TapHandler { // The animation starts running when you click within the rectangle onTapped: anim.running = true; } } // This animation specifically targets the Rectangle's properties to animate SequentialAnimation { id: anim // Animations on their own are not running by default // The default number of loops is one, restart the animation to see it again NumberAnimation { target: rectangle; property: "x"; from: 0; to: 200; duration: 500 } NumberAnimation { target: rectangle; property: "x"; from: 200; to: 0; duration: 500 } } }
アニメーションの詳細については、「Qt Quick の重要な概念 - 状態、遷移、アニメーション」のページを参照してください。
本ドキュメントに含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。