Как предсказать хорошую позицию для привязки мерцания в QML

У меня есть мерцание, которое я хочу привязать к определенным позициям (которые я вычисляю определенным образом). Я вижу два варианта:

  1. в движении закруглил привязку к ближайшей позиции к "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()
}

1 ответ

Решение

В варианте 2 я нахожу затруднительным выбор позиции привязки. Если пользователь скользит с быстрым движением, я предпочел бы привязаться к позиции, близкой к позиции, где движение закончится, но это трудно предсказать.

У вас есть свойства для горизонтальной и вертикальной скорости, так что из них вы можете рассчитать составную скорость, есть другая

property bool aboutToStop: horizontalVelocity + verticalVelocity < thresholdValue

а также

onAboutToStopChanged: if (aboutToStop) playASnapAnimationToTheNearestItem()

Другие вопросы по тегам