gpt4 book ai didi

android - 等到 ListView smoothScrollToPosition() 完成

转载 作者:可可西里 更新时间:2023-11-01 18:45:17 28 4
gpt4 key购买 nike

范围

我需要平滑地滚动到某个位置,然后使用 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();

最佳答案

final ListView listView = ...;
View listItemView = ...;
listView.smoothScrollBy(listItemView.getHeight() * NUMBER_OF_VIEWS,
DURATION * 2);
listView.postDelayed(new Runnable() {
public void run() {
listView.smoothScrollBy(0, 0); // Stops the listview from overshooting.
listView.setSelection(0);
}
}, DURATION);

当然,滚动的方向等需要根据您的用例进行调整(转到列表顶部)

编辑:如果滚动速度太高,旧的解决方案可能会过冲,smoothScrollBy(0,0) 将在立即正确设置选择之前停止平滑滚动。

关于android - 等到 ListView smoothScrollToPosition() 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7928820/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com