【发布时间】:2011-12-17 05:56:30
【问题描述】:
范围
我需要平滑滚动到某个位置,然后用setSelection(anotherPosition)“跳转”到另一个位置。这样做是为了创建平滑滚动的错觉(例如)ListView 中的 100 个项目。 smoothScrollToPosition(100) 持续时间太长了,你知道的。
问题
setSelection() 不会等到smoothScrollToPosition 完成它的工作,所以会立即调用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();
【问题讨论】:
标签: android listview smooth-scrolling