16

ListView私は、ユーザーの操作なしで自動的にスクロールし続けるというアイデアに取り組んできました。これは、たとえばSmoothScrollToPositionFromTopなどの Android API を使用して絶対に実行できます。

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)

およびプログラムでFlingListViewAndroid

あなたの場合、あなたが何をスムーズに呼んでいるのかを理解するのは難しいです。通常、滑らかさの問題は、リストビューの最適でない使用法と、セルレイアウトまたはアダプタのgetViewメソッド内でのビューの作成/リサイクルのいずれかの問題に関連しています。

プレースホルダーを使用していますか?考慮すべき重要なことは、Drawablesの使用法でもあります。

私はあなたが探しているものを達成したことはありませんが、頭に浮かぶ簡単なアイデアは次のとおりです。

  • 1つの位置または2つのビューをスクロールする方法を見つけます。
  • アダプタ内でリングバッファを使用します。たとえば、アイテムのリストに100個のアイテムがあるとします。次に、最初に、リストビューのアイテム0はリストのアイテム0です。リストビューを1項目上にスクロールすると、リストビューの項目0がリストの項目1になります。したがって、問題はスクロールではなく、スクロールと同期して、アイテムの無限のリストを表示することです。
于 2012-12-26T07:25:07.247 に答える