Вызов scrollTo в onScrollChanged в Android HorizontalScrollView
Мой макет приложения выглядит так:
Пожалуйста, нажмите, чтобы увидеть это изображение
моя область - синяя область, 4096 пикселей. красная рамка - экран телефона, который представляет собой HorizontalScrollView.
Мой макет выглядит так:
<HorizontalScrollView>
<ChartContent>
</ChartContent>
</HorizontalScrollView>
когда HorizontalScrollView (я буду называть его HSV для удобства) прокручивается до конца области содержимого. Я сделаю это прокруткой до начала области содержимого и перерисовать диаграмму в моей области содержимого. Это заставит пользователя чувствовать, что это как бесконечный скролл-просмотр.
Я следую за этим постом: Синхронизировать ScrollView позиции прокрутки - Android. Унаследуйте класс horizontalScrollView и переопределите метод onScrollChanged, чтобы я мог получить текущий x HSV.
Войти как это:
это означает, что красная рамка движется слева направо (oldx -> x)
onScrollChanged: 1006 -> 1180, speed = 174
onScrollChanged: 1006 -> 1180, speed = 174
onScrollChanged: 1180 -> 1254, speed = 74
onScrollChanged: 1180 -> 1254, speed = 74
onScrollChanged: 1254 -> 1325, speed = 71
onScrollChanged: 1254 -> 1325, speed = 71
onScrollChanged: 1325 -> 1366, speed = 41
onScrollChanged: 1325 -> 1366, speed = 41
onScrollChanged: 1366 -> 1406, speed = 40
onScrollChanged: 1366 -> 1406, speed = 40
onScrollChanged: 1406 -> 1449, speed = 43
onScrollChanged: 1406 -> 1449, speed = 43
onScrollChanged: 1449 -> 1499, speed = 50
onScrollChanged: 1449 -> 1499, speed = 50
onScrollChanged: 1499 -> 1518, speed = 19
onScrollChanged: 1499 -> 1518, speed = 19
onScrollChanged: 1518 -> 1544, speed = 26
но когда я вызываю scrollTo внутри onScrollChanged:
call HSV.scrollTo(60)
Журнал:
onScrollChanged: 3708 -> 60, speed = -3648 —> ok
onScrollChanged: 3579 -> 60, speed = -3519 —> ok
onScrollChanged: 60 -> 3738, speed = 3678 —> wrong
onScrollChanged: 3738 -> 60, speed = -3678 —> wrong
onScrollChanged: 60 -> 60, speed = 0 —> wrong
Строка 3 - 5 очень сбивает с толку, и HSV внезапно остановится в положении x = 60.
Что-то не так с моей реализацией? Или я могу использовать другое решение для достижения моей цели?