Подождите, пока функция smoothScrollToPosition () в ListView завершится.

Область действия

Мне нужно плавно прокрутить до определенной позиции, а затем «перейти» в другую позицию с помощью 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();
15
задан dim8 21 October 2016 в 04:13
поделиться