Мне нужно реализовать галерею, которая прокручивает по одному элементу за раз и может выполнять «автопрокрутку»: то есть каждые пару секунд она автоматически прокручивается к следующему элементу.
Согласно этой теме: 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 обрабатывают события ввода? Я заглянул в код галереи в поисках подсказок, но ничего не нашел! Вроде как должно работать.
Пожалуйста, я в тупике ... есть идеи?
Спасибо