автоматическая прокрутка виджета галереи

Мне нужно реализовать галерею, которая прокручивает по одному элементу за раз и может выполнять «автопрокрутку»: то есть каждые пару секунд она автоматически прокручивается к следующему элементу.

Согласно этой теме: Android: программно анимация между изображениями в виджете «Галерея» , я расширил галерею, переопределив onFling , чтобы игнорировать событие бросания и вместо этого имитировать стрелку DPAD влево или вправо для перемещения по одному элементу за раз:

@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
          int kEvent;
          if(isScrollingLeft(e1, e2)){ //Check if scrolling left
            kEvent = KeyEvent.KEYCODE_DPAD_LEFT;
          }
          else{ //Otherwise scrolling right
            kEvent = KeyEvent.KEYCODE_DPAD_RIGHT;
          }
          onKeyDown(kEvent, null);

          return true; 
    }

Это хорошо работает. Для автоматической прокрутки я создаю обработчик и postDelayed runnable, который имитирует то же нажатие клавиши DPAD таким же образом:

handler.postDelayed(new Runnable() {
    public void run() { 
        onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
    }
}, AUTO_SCROLL_INTERVAL);

но это ничего не делает !!

Я знаю, что runnable выполняется, как ожидалось, с правильным интервалом, поскольку я зарегистрировал его и подтвердил это, но onKeyDown не заставляет галерею прокручивать или переключать элементы. Почему? будет ли это работать в одном методе, а не в другом? Я попытался вместо этого позвонить своему onFling , но безрезультатно. Также попытался dispatchKeyEvent , но безуспешно.

Мне действительно нужно это сделать, но я также действительно хочу понять, почему один и тот же код не дает одинаковых результатов в двух разных местах ... Имеет ли это какое-то отношение к тому, как представления Android обрабатывают события ввода? Я заглянул в код галереи в поисках подсказок, но ничего не нашел! Вроде как должно работать.

Пожалуйста, я в тупике ... есть идеи?

Спасибо

6
задан Community 23 May 2017 в 11:55
поделиться