Бесконечный автоматический список прокрутки с контролируемой скоростью прокрутки - программирование
Подтвердить что ты не робот

Бесконечный автоматический список прокрутки с контролируемой скоростью прокрутки

Я работаю над идеей ListView, где она автоматически прокручивается без взаимодействия с пользователем, и это абсолютно выполнимо с использованием API-интерфейсов Android, например 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();
4b9b3361

Ответ 1

Я предлагаю, что ваш адаптер реализован эффективным образом. так что этот код просто свитки listview

вам нужно попробовать другие значения переменных

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

Ответ 2

Вот несколько указателей: Имитировать onFling() программно, а не обнаруживать его (Android)

и Программно Fling ListView Android

Трудно понять, что вы называете достаточно гладким в своем деле. Обычно проблемы с гладкостью связаны с не оптимальным использованием списков и проблем в макетах ячеек или созданием/рециркуляцией представлений внутри метода адаптеров getView.

Вы используете местозаполнитель? Важно также рассмотреть Использование Drawables.

Я никогда не добивался того, что вы ищете, но простая идея, которая приходит на ум:

  • найдите способ прокрутки вида 1 позиции или 2.
  • используйте кольцевой буфер внутри адаптера. Например, скажем, у вас есть 100 предметов в вашем списке предметов. Затем в начале элемент 0 списка представляет собой пункт 0 вашего списка. Когда listview прокручивается из 1 элемента, тогда элемент 0 списка listview должен стать элементом 1 в вашем списке. Таким образом, проблема не будет прокручиваться, а больше синхронизируется с прокруткой и отображением бесконечного списка элементов.