Мне нужно реализовать галерею, которая прокручивает по одному элементу за раз, и которая может выполнять «автопрокрутку»: то есть каждые пару секунд она автоматически прокручивается до следующего элемента.
Согласно этой теме: 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 исполняемый файл, который имитирует одинаковое нажатие клавиши DPAD таким же образом:
handler.postDelayed(new Runnable() {
public void run() {
onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null);
}
}, AUTO_SCROLL_INTERVAL);
но это ничего не делает !!
Я знаю, что исполняемый файл исполняется, как и ожидалось, с правильным интервалом, поскольку я зарегистрировал его и подтвердил это, но onKeyDown не заставляет галерею прокручивать или переключать элементы.
Почему это работает в одном методе, а не в другом? Вместо этого я попытался позвонить на onFling , но безрезультатно Также попытался dispatchKeyEvent , но не повезло.
Мне действительно нужно это запустить, но я также очень хочу понять, почему один и тот же код не дает одинаковых результатов в двух разных местах ... Это как-то связано с тем, как представления Android обрабатывают события ввода? Я искал код галереи для подсказок, но ничего не нашел! Кажется, что это должно работать.
Пожалуйста, я в тупике ... есть идеи?
Спасибо