1
私はListView
モデルを示しています。ランダムな位置にエントリを追加するかもしれません。アニメート `positionViewAtIndex`
今、私は私の新しいエントリを見てみたい、と
positionViewAtIndex(newIndex, ListView.Visible)
と、それにListView
を移動しよう。しかし、この変更は非常に難しいfeelesをsomtimes。 somアニメーションで滑らかな姿勢がありますか?
Aやや長い例では、一緒にプレイする:contentXの加算アニメーション要素を追加することによって、あなたはそれを行うことができます
import QtQuick 2.7
import QtQuick.Controls 2.0
ApplicationWindow
{
width: 1024
height: 800
visible: true
property int lastAddedIndex: -1
onLastAddedIndexChanged: lv.positionViewAtIndex(lastAddedIndex, ListView.Contain)
Button {
property int num: 10
text: 'Add element: ' + num
onClicked: {
lastAddedIndex = Math.floor(Math.random(num) * lm.count)
lm.insert(lastAddedIndex, { num : this.num })
num++
}
}
ListModel {
id: lm
ListElement { num: 0 }
ListElement { num: 1 }
ListElement { num: 2 }
ListElement { num: 3 }
ListElement { num: 4 }
ListElement { num: 5 }
ListElement { num: 6 }
ListElement { num: 7 }
ListElement { num: 8 }
ListElement { num: 9 }
}
ListView {
id: lv
model: lm
y: 150
width: 800
height: 100
spacing: 2
clip: true
orientation: ListView.Horizontal
delegate: Rectangle {
width: 150
height: 100
border.color: 'black'
color: lastAddedIndex === index ? 'purple' : 'white'
Text {
anchors.centerIn: parent
text: index + ': ' + num
}
}
add: Transition { NumberAnimation { property: 'width'; from: 0; to: 150; duration: 600 } }
}
}
ありがとう:指定されたインデックスで、それはあなたに滑らかなアニメーションを与えるだろう。それは興味深い。私は 'Behavior on contentX'で試しましたが失敗しました。これは(ほぼ)動作します。追加された要素の最初の「幅」が0であるため、項目が左側に追加されていれば十分にスクロールしないという唯一の欠点があります。しかし、これは管理可能です。 – derM