我的问题是smoothScrollToPositionFromTop
方法忽略持续时间参数。
我尝试使用API方法> 10
listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);
我期待的是:对于任何内容高度,滚动到底部100ms。
我得到的是:它滚动到底部,但忽略我的持续时间参数。
如果我设置10或100或1000,它将同时滚动。
如果您需要更多详细信息 - 只需说明您需要的确切详细信息,我将使用它进行更新。
UPD: 它的效果很好,持续时间很长(我尝试11500)而且真的很宽松。但是,如果我设置为300或更低,它仍然像~1000那样滚动。 我的listview中的行大约100个。
答案 0 :(得分:1)
您可能需要将来电嵌入Runnable
.-
post(new Runnable() {
@Override
public void run() {
listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);
}
});
答案 1 :(得分:1)
我刚遇到这个问题。似乎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);
}
});
}