Intereting Posts
Перенаправление аудио / создание альтернативных звуковых дорожек в Android Android Просмотреть разницу performClick () и callOnClick () Лучшее место для addHeaderView в ListFragment Android studio 1.0.2 не для создания приложения: ошибка mergeDebugResources Активность просочилась в окно com.android.internal.policy.impl.PhoneWindow$DecorView@44f72ff0, которое было первоначально добавлено здесь Какие криптоалгоритмы поддерживают Android? Когда закрыть соединение db на Android? Каждый раз после завершения операции или после выхода из приложения Веб-просмотр Android не может отображать видео youtube, встроенное через iframe Лучший способ обработки событий в Android Экран предпочтения Пользовательский макет работает только со вторым щелчком Отладка собственного кода в android при eclipse не выполняется Ошибка Android Studio: (3, 0) Плагин с идентификатором «com.android.application» не найден Android: обновление галереи после сохранения новых изображений Приложение AOSP Privileged vs System Прозрачный GIF в Android ImageView

Как прокрутить анимацию программно

Я пытаюсь реализовать анимацию прокрутки для галереи программно.

Пробовал с setSelection(int pos, Boolean animate) и он не работает.

Есть ли способ переопределить setSelection() .

Solutions Collecting From Web of "Как прокрутить анимацию программно"

Просто сейчас у меня есть эта проблема. Мне нужно было перемещать только один элемент галереи, поэтому лучшим решением для меня было эмулировать событие с нажатием клавиши

 myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_RIGHT, null); 

или

 myGallery.onKeyDown(KeyEvent.KEYCODE_DPAD_LEFT, null); 

Gallery.setSelection (int position, boolean animate);

См. Ниже URL: http://groups.google.com/group/android-developers/browse_thread/thread/9140fd6af3061cdf/7f89e53ae53e455b?lnk=gst&q=setselection#7f89e53ae53e455b

Солн: Если вы все еще ищете, у меня есть два возможных решения для вас, оба слегка неприятные:

(1) Вы можете сделать галерею сделать бросок с выбранной скоростью, таким образом:

MyGallery.onFling (null, null, speed, 0);

С помощью настройки скорости вы можете настроить значения для перемещения по одному или двум в любом направлении. Как самостоятельные центры галереи, вам не нужно точно направлять цель.

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

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

Исходя из превосходного мышления Курру, который имитирует щелчок следующего или предыдущего вида.

 //scroll forward or backward private void scroll(int type){ View selectedV = mG.getSelectedView(); int idx = mG.indexOfChild(selectedV); switch(type){ case FORWARD: default: if(idx<mG.getChildCount()-1) idx++; break; case BACKWARD: if(idx>0) idx--; break; } //now scrolled view's child idx in gallery is gotten View nextView = mG.getChildAt(idx); //(x,y) in scrolled view is gotten int x = nextView.getLeft()+nextView.getWidth()/2; int y = nextView.getTop()+nextView.getHeight()/2; String out = String.format("x=%d, y=%d", x, y); Log.i(TAG+".scroll", out); //Kurru's simulating clicking view MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); mG.onDown(event); boolean res = mG.onSingleTapUp(null); Log.i(TAG+".scroll", "onSingleTapUp return =" + res); } 

Я просматривал источник галереи, чтобы узнать, могу ли я получить эту функцию. Похоже, что с этим кодом можно что-то сделать. Однако я сдался, прежде чем я смог заставить его работать. Кажется, я не проходил в правильных координатах, поэтому res всегда возвращал false. Если бы это сработало, оно вернулось бы.

Просто опубликуйте это здесь, в случае, если кто-то еще захочет это исправить! (Пожалуйста, разместите свое решение, если вы справитесь с этим!)

 Rect rect = new Rect(); gallery.getHitRect(rect); int x = rect.centerX()+getWindowManager().getDefaultDisplay().getWidth(); int y = rect.centerY(); MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); timesGallery.onDown(event); boolean res = timesGallery.onSingleTapUp(null); 

Я немного изменил код, данный «Kurru». Это сейчас работает

 Rect rect = new Rect(); gallery.getHitRect(rect); int width = Math.abs(rect.width()); if(!isForwardScroll){ width = width * -1; } int x = rect.centerX()+width/2; int y = rect.centerY(); MotionEvent event = MotionEvent.obtain(100, 100, MotionEvent.ACTION_DOWN, x, y, 0); gallery.onDown(event); boolean res = gallery.onSingleTapUp(null);