平滑滚动到位置从顶部忽略持续时间参数



我的问题是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);
        }
    });
}

最新更新