我的问题是smoothScrollToPositionFromTop
方法忽略持续时间参数。
我尝试使用 API> 10 的方法
listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);
我的期望:滚动到底部,任何内容高度为 100 毫秒。
我得到的:它滚动到底部,但忽略我的持续时间参数。
如果我设置 10、100 或 1000,它将以相同的时间滚动。
如果您需要更多详细信息 - 只需说出您需要的确切细节,我会更新它。
上级:它在高持续时间下效果很好(我尝试 11500),而且真的很隆。但是如果我设置 300 或更低,它无论如何都会像 ~1000 一样滚动。我的列表中的行查看大约 100 多。
调用嵌入Runnable
.-
post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);
}
});
我刚刚遇到了这个问题。AbsListView中似乎存在一个错误,该错误阻止Android以足够快的速度绘制视图以遵循持续时间参数:https://code.google.com/p/android/issues/detail?id=66744
由于 smoothScrollToPositionFromTop 在沿少量视图移动时效果很好,因此我们将 ListView 移动到要滚动的 x 个项内,然后滚动最后一位以模拟运动。
例如,我们有一个很大的列表,我们希望在单击按钮时提供滚动到顶部的功能。在下面的代码中,我们检查列表的下方,然后根据需要进行调整。然后我们滚动最后一点。
if (listView != null && listView.getCount() > 0) {
listView.post(new Runnable() {
@Override
public void run() {
if (listView.getFirstVisiblePosition() > 20) {
listView.setSelection(20);
}
listView.smoothScrollToPositionFromTop(0, 0, 300);
}
});
}