Ответ 1
Чтобы ответить на ваши вопросы из приглашения:
- Нет API, чтобы получить текущую скорость ScrollView.
- Вы можете остановить текущий переход, тщательно обработав события касания, как описано в предыдущем сообщении fooobar.com/questions/329680/....
Глядя на Исходный код ScrollView, он использует OverScroller для обработки событий перехода. Есть два способа приблизиться к этому:
- Используйте отражение для доступа к частному полю mScroller в ScrollView. После того, как вы получили доступ к нему, вы можете получить текущую скорость через общедоступный API:
public float getCurrVelocity();
Использование отражения никогда не является идеальным, поскольку вам нужно беспокоиться о том, что он нарушает версии Android, но простое изолированное использование может быть относительно эффективным. - Переопределите метод fling() в ScrollView и создайте экземпляр OverScroller для отслеживания прокрутки. Если все будет хорошо, ваш Overscoller всегда будет в том же состоянии, что и в ScrollView.
Что-то вроде этого:
@Override
public void fling(int velocityY)
{
// Pass through fling to parent
super.fling(velocityY);
// Keep track of velocity using our own Overscoller instance
mOurOverscroller = mScroller.fling(mScrollX, mScrollY, 0, velocityY, 0, 0, 0,
Math.max(0, bottom - height), 0, height/2);
}