Масштаб
Мне нужно прокручивать до определенной позиции гладко, а затем "прыгать" в другую позицию с помощью setSelection(anotherPosition)
. Это делается для создания иллюзии гладкой прокрутки (например,) 100 элементов в ListView
. smoothScrollToPosition(100)
длится слишком много, вы знаете.
Проблема
setSelection()
не дожидается, пока smoothScrollToPositio
n завершит свою работу, поэтому setSelection()
вызывается немедленно, и пользователь видит только быстрый переход;
код
private final int scrollableItems = 20;
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.smoothScrollToPosition(firstVisiblePosition - scrollableItems);
mListView.setSelection(0);
}
mListView.clearFocus();
Идея
ОК, мы могли бы изменить логику иллюзии гладкости: сначала setSelection()
, затем прокрутите гладко (мы прокручиваем до самого первого элемента в верхней части списка):
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();