如何将列表视图滚动到当前项目?

时间:2016-11-26 13:03:40

标签: qt qml qtquick2

我有一个列表视图。如果我单击一个单元格,该特定单元格需要使用小滚动动画移动到中心。使用我的代码,单击的单元格将在没有任何动画的情况下到达中心。

是否可以为此添加动画?

我的代码如下:

    ListView {
        id: source_list
        width: 1080
        height: 480
        spacing: 50
        model: mediaSongsModel
        delegate: mediaSongsDelegate
        focus: true
        interactive: true
        clip: true
        highlightMoveDuration: 50
        snapMode: ListView.SnapToItem
        boundsBehavior:Flickable.StopAtBounds
        preferredHighlightBegin: 260/scaleFactor
        preferredHighlightEnd: 260/scaleFactor
        highlightRangeMode: ListView.StrictlyEnforceRange
    }                

    Component {
        id: mediaSongsDelegate
        Item {
            id: wrapper
            width: 1080
            height: 200

            MouseArea {
                anchors.fill: parent
                onClicked: {
                    source_list.currentIndex = index
                    source_list.positionViewAtIndex(index,ListView.Center)    
                }
            }           
        }
    }

2 个答案:

答案 0 :(得分:3)

如果当前项目应始终位于视图的中心或特定区域内,则可以使用preferredHighlightBeginpreferredHightlightEnd属性来定义该区域。

highlightRangeMode的值控制是否以及是否严格适用。例如。如果第一个项目是当前项目且值为StriclyEnforeRange,则该项目将在指定区域内,即使这意味着比正常项目更进一步滚动"滚动到顶部"会。

这样的事情应该有效

ListView {
    preferredHighlightBegin: height / 2 - 100 // 100 being item height / 2
    preferredHighlightEnd: height / 2 + 100 // 100 being item height / 2
    highlightRangeMode: ListView.StrictlyEnforceRange
}

答案 1 :(得分:1)

我通过删除以下代码行解决了我的问题:

source_list.positionViewAtIndex(index,ListView.Center);

动画正常工作。