16

我一直在研究一个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();
4

2 回答 2

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();
                        }
                    });
于 2012-12-28T14:04:31.797 回答
-1

这里有几点建议:以编程方式模拟 onFling() 而不是检测它(Android)

以编程方式抛出 ListView Android

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

使用占位符吗?需要考虑的重要一点是Drawables 的使用

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

  • 找到一种方法来滚动 1 个位置或 2 个位置的视图。
  • 在适配器内使用环形缓冲区。例如,假设您的项目列表中有 100 个项目。然后在开始时,列表视图的第 0 项是列表的第 0 项。当列表视图向上滚动 1 项时,列表视图的第 0 项应成为列表中的第 1 项。因此,问题不在于滚动,而是与滚动和显示无穷无尽的项目列表更加同步。
于 2012-12-26T07:25:07.247 回答