具有滚动速度控制的无限自动滚动列表视图

时间:2012-12-19 12:19:37

标签: android listview scroll autoscroll

我一直在研究一个ListView的想法,它会自动滚动而不需要用户交互,而且使用Android API非常可行,例如 smoothScrollToPositionFromTop

我已经实现ListView BaseAdapter,它会永远(几乎)加载项目,以便不停止自我重复ListView

我想在这里实现的是让我的ListView以一定的速度(慢速)永久滚动,以便在向下滚动时使项目清晰可读,我不确定ListView是否是我的最佳选择这里。

下面的

是我想要做的事情的片段。结果很好但不够流畅,我觉得ListView会闪烁。

我需要提高平滑度,效率和控制速度

new Thread(new Runnable() {

    @Override
    public void run() {
        int listViewSize = mListView.getAdapter().getCount();

        for (int index = 0; index < listViewSize ; index++) {
            mListView.smoothScrollToPositionFromTop(mListViewA.getLastVisiblePosition() + 100, 0, 6000);
            try {
                // it helps scrolling to stay smooth as possible (by experiment)
                Thread.sleep(60);
            } catch (InterruptedException e) {

            }
        }
    }
}).start();

2 个答案:

答案 0 :(得分:15)

我建议,你的适配器以有效的方式实现。 所以这段代码只是滚动列表视图

您需要尝试其他变量值

final long totalScrollTime = Long.MAX_VALUE; //total scroll time. I think that 300 000 000 years is close enouth to infinity. if not enought you can restart timer in onFinish()

final int scrollPeriod = 20; // every 20 ms scoll will happened. smaller values for smoother

final int heightToScroll = 20; // will be scrolled to 20 px every time. smaller values for smoother scrolling

listView.post(new Runnable() {
                        @Override
                        public void run() {
                                new CountDownTimer(totalScrollTime, scrollPeriod ) {
                                    public void onTick(long millisUntilFinished) {
                                        listView.scrollBy(0, heightToScroll);
                                    }

                                public void onFinish() {
                                    //you can add code for restarting timer here
                                }
                            }.start();
                        }
                    });

答案 1 :(得分:-1)

这里有一些指示:Simulate onFling() programmatically instead of detecting it (Android)

Programmatically Fling ListView Android

在你的情况下很难弄清楚你所说的足够顺畅。通常,平滑度问题与适配器的getView方法中的单元格布局或视图创建/回收中的列表视图和故障的非最佳使用有关。

use a placeholder吗? 需要考虑的重要事项还有Drawables usage

我从来没有达到你想要的,但想到一个简单的想法是:

  • 找到滚动1个位置或2的视图的方法。
  • 在适配器内使用环形缓冲区。例如,假设您的物品清单中有100件物品。然后在开头,listview的第0项是列表的第0项。当列表视图向上滚动1个项目时,列表视图的项目0应该成为列表中的项目1。因此问题不在于滚动,而是与滚动和显示无穷无尽的项目列表进行更多同步。