如何预测在 QML 中捕捉轻弹的好位置

How to predict a good position for snapping a flickable in QML

我有一个 flickable,我想将其捕捉到特定位置(我以特定方式计算)。我看到两个选项:

  1. 在 movementEnded 我用数字动画
  2. 捕捉到离 "contentX" 最近的位置
  3. 在 flickEnded 中,我用数字动画
  4. 捕捉到最接近 "contentX" 的位置

选项1看起来不太好,移动停止,然后flickable再次开始移动(捕捉位置相隔半个屏幕)。

在选项2中,我发现捕捉位置的选择很困难。如果用户快速移动滑动,我更愿意捕捉到接近移动结束位置的位置,但这很难预测。

这是选项 1 的示例代码:

NumberAnimation on contentY {
        id: yAnimation
        to: 0
        duration: 200
    }
onMovementEnded: {
       var index = Math.round(contentY / (itemHeight))
       yAnimation.to = index * itemHeight
       yAnimation.start()
}

In Option 2 I find the choice of snap position difficult. If the user slides with a fast movement, I would prefer to snap to a position close to the position, where the movement would end, but that is hard to predict.

你有水平和垂直速度的属性,所以你可以计算出一个复合速度,还有另一个

property bool aboutToStop: horizontalVelocity + verticalVelocity < thresholdValue

onAboutToStopChanged: if (aboutToStop) playASnapAnimationToTheNearestItem()