smoothScrollToPositionFromTop忽略持续时间参数

时间:2013-10-15 10:03:24

标签: android listview scroll

我的问题是smoothScrollToPositionFromTop方法忽略持续时间参数。

我尝试使用API​​方法> 10

listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);

我期待的是:对于任何内容高度,滚动到底部100ms。

我得到的是:它滚动到底部,但忽略我的持续时间参数。

如果我设置10或100或1000,它将同时滚动。

如果您需要更多详细信息 - 只需说明您需要的确切详细信息,我将使用它进行更新。

UPD: 它的效果很好,持续时间很长(我尝试11500)而且真的很宽松。但是,如果我设置为300或更低,它仍然像~1000那样滚动。 我的listview中的行大约100个。

2 个答案:

答案 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);
        }
    });
}