Мне нужно плавно прокрутить до определенной позиции, а затем «перейти» в другую позицию с помощью 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 ()
, затем плавно прокрутите (мы прокручиваем до самого первого элемента поверх list):
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();