viewpager переходит от первого к последнему изображению в базе данных Firebase - PullRequest
0 голосов
/ 05 июля 2019

Я создал приложение, в котором я загружаю изображения в firebase, затем извлекаю их и отображаю в видеопейджере. Я могу получить все изображения, но моя проблема в том, что, когда в окне просмотра они очень быстро переходят от первого к последнему изображению (другие изображения я не вижу, я вижу только первое, а затем последнее).

Я попытался добавить цикл, который просто продолжает увеличивать число, чтобы отложить приложение, но это не сработало. Затем я использовал обработчик для задержки, но он не работал. Вот как мой код выглядит в настоящее время - он находится внутри класса TimerTask, потому что просмотрщик автоматически пролистывает, это просто, хотя смотреть

    public class MyTimerTask extends TimerTask{
        @Override
        public void run() {
           menuSliderActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    int i=0;
                    while(i<sliderImg.size()){
                        while (viewPager.getCurrentItem()==i){
                            viewPager.setCurrentItem(i+1);
                            i++;
                        }
                    }
                    if (viewPager.getCurrentItem()==sliderImg.size()) {
                        viewPager.setCurrentItem(0);
                    }
                    }
            });
        }
    }

Я также пробовал:

 public class MyTimerTask extends TimerTask{
        @Override
        public void run() {
           menuSliderActivity.this.runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    int i=0;
                    while(i<=sliderImg.size()){
                        if(viewPager.getCurrentItem()==i){
                            viewPager.setCurrentItem(i+1);
                        } else if (viewPager.getCurrentItem()==sliderImg.size()) {
                            viewPager.setCurrentItem(0);
                         }
                        i++;
                    }
                    }
            });  
        }
    }

Кто-нибудь знает, что я делаю не так? (Я новичок в Android Studio и Java, поэтому я могу использовать функцию -runnable (), run (), ... и т. Д.) Неправильно. Спасибо.

Ответы [ 2 ]

0 голосов
/ 05 июля 2019

Вы можете попробовать этот, который использует поток

DelayedTask.java

class DelayedTask extends Thread {
        private Activity activity;
        private int count;
        private int sleepDelay;
        private int totalDelay = 5000;

        public DelayedTask(Activity activity, int count) {
            this.activity = activity;
            this.count = count;
            this.sleepDelay = totalDelay / count;
        }


        @Override
        public void run() {
            for (int i = 0; i < count; i++) {
                try {
                    final int j = i;
                    activity.runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            viewPager.setCurrentItem(j);
                        }
                    });
                    Thread.sleep(sleepDelay);
                } catch (Exception e) {
                    e.printStackTrace();
                }
            }
        }
    }

используйте это, когда все загруженные изображения

DelayedTask delayedTask = new DelayedTask(MainActivity.this, 10 /*no of images*/);
delayedTask.start();

0 голосов
/ 05 июля 2019

Вы должны использовать CountDownTimer для зацикливания ваших изображений в ViewPager. поэтому он будет зацикливаться медленно, как вы хотите.

new CountDownTimer(30000, 1000) {

 public void onTick(long millisUntilFinished) {
     mTextField.setText("seconds remaining: " + millisUntilFinished / 1000);
 }

 public void onFinish() {
     mTextField.setText("done!");
 }
.

} начать ();

Вот ссылка

https://developer.android.com/reference/android/os/CountDownTimer

...