无限自动滚动ListView与滚动速度控制

我一直在处理一个ListView想法,它保持滚动自动没有用户交互,这是完全可以使用android API例如smoothScrollToPositionFromTop

我已经实现ListView BaseAdapter它永久(几乎)加载项目以获得一个非停止自我重复的ListView

我想在这里实现的是保持我的ListView滚动一定的速度(慢),使项目清晰和可读性滚动下来,我不知道如果ListView是我最好的select在这里。

下面是我正在尝试做的一个片段。 结果是不错的,但不够stream畅,我可以感觉到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(); 

Solutions Collecting From Web of "无限自动滚动ListView与滚动速度控制"

我build议,你的适配器以有效的方式实现。 所以这段代码只是滚动listview

你需要尝试另一个variables值

 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(); } }); 

这里有几个指针:以编程方式模拟onFling()而不是检测它(Android)

和编程的Fling ListView Android

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

你使用占位符吗? 要考虑的重要的事情也是Drawables用法 。

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

  • find一种方法来滚动1位或2的视图。
  • 在适配器内使用环形缓冲区。 例如,假设您的项目列表中有100个项目。 然后在开始处,列表视图的项目0是您的列表的项目0。 当列表视图向上滚动1个项目时,则listview的项目0应该成为您的列表中的项目1。 因此,问题不会滚动,而是更多的同步滚动和显示一个无尽的项目列表。