私のアプリケーション UI では、QML リストビューに多数の要素を表示します。そのうちの 1 つが削除されると、その上の要素の後ろにアニメーションでスライドするはずです。これを実現するコードは、Qt ドキュメントのこのサンプルと非常に似ていますy
が、代わりに座標をアニメーション化しscale
、値をデクリメントして、要素がその上の要素の前ではなく後ろにz
スライドするようにする必要があります。
Component {
id: delegate
Item {
ListView.onRemove:
SequentialAnimation {
// enable delayed removal
PropertyAction {
target: wrapper
property: "ListView.delayRemove"
value: true
}
// make box slide up behind rather
// than in front of the box above
PropertyAction {
target: wrapper
property: "z"
value: wrapper.z - 1
}
NumberAnimation {
target : wrapper
property : "y"
from : wrapper.y
to : wrapper.y - wrapper.height
duration : style.removeTransitionDuration
easing.type : style.removeTransitionType
}
// disable delayed removal
PropertyAction {
target: wrapper
property: "ListView.delayRemove"
value: false
}
}
}
このコードは基本的に機能しますが、大きな欠陥が 1 つあります。削除される要素が上にスライドする間、その下の要素は元の場所にとどまり、要素が完全に消えた後にのみ新しい位置に「ジャンプ」します。削除される要素が上にスライドしている間、それらを上に移動させたいと思います。
このサンプルに示すようにを指定して、要素の動きをy
方向にアニメーション化しようとしました。これは、プロパティが明示的に (ハンドラーなどで)設定されている場合に機能しますが、要素が削除されたために暗黙的に変更された場合はアニメーションがありません。Behavior on y
PropertyAnimation
y
MouseArea::onClicked
y
また、ダイナミック リスト ListView の例で行われているheight
orなどの他のプロパティをアニメーション化し、それを と組み合わせてみましたが、要素がやや複雑であるため、結果は単純に驚くほどに見えます。上にスライドします。scale
opacity
下の要素を上にスライドさせるにはどうすればよいですか? これはQt 4.8 / Qt Quick 1.1でまったく可能ですか? Qt 5/Qt Quick 2.0 では、この特定の問題に関して何か改善点はありますか?