範囲
特定の位置にスムーズにスクロールしてから、。を使用して別の位置に「ジャンプ」する必要があり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();
アイディア
OK、滑らかさの錯覚の論理を変更することができます:最初setSelection()
に、次にスムーズにスクロールします(リストの一番上の最初の項目にスクロールします):
int firstVisiblePosition = mListView.getFirstVisiblePosition();
if (firstVisiblePosition < scrollableItems) {
mListView.smoothScrollToPosition(0);
} else {
mListView.setSelection(scrollableItems);
mListView.smoothScrollToPosition(0);
}
mListView.clearFocus();