3

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

  1. 在 motionEnded 我用数字动画捕捉到“contentX”的最近位置
  2. 在 flickEnded 我用数字动画捕捉到“contentX”的最近位置

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

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

这是选项 1 的示例代码:

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

1 回答 1

4

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

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

property bool aboutToStop: horizontalVelocity + verticalVelocity < thresholdValue

onAboutToStopChanged: if (aboutToStop) playASnapAnimationToTheNearestItem()

于 2015-11-27T21:22:06.397 回答