范围
我需要平滑滚动到某个位置,然后使用 .“跳转”到另一个位置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();