1

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

我正在尝试使用 API > 10 的方法

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

我期待什么:对于任何内容高度,以 100 毫秒滚动到底部。

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

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

如果您需要更多详细信息 - 只需说出您需要的确切详细信息,我会更新。

UPD: 它在持续时间长的情况下效果很好(我尝试了 11500),而且真的很长。但如果我设置 300 或更低,它会滚动到 ~1000 左右。我的列表视图中的行大约有 100 多行。

4

2 回答 2

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);
        }
    });
}
于 2014-08-20T00:28:25.813 回答
1

您可能需要将呼叫嵌入到Runnable.-

post(new Runnable() {
    @Override
    public void run() {
        listView.smoothScrollToPositionFromTop(position, listView.getHeight() - ROW_HEIGHT, 100);
    }
});
于 2013-10-15T10:23:34.227 回答