Галерея Android - Замена растрового изображения в ImageView после остановки прокрутки - PullRequest
4 голосов
/ 30 сентября 2011

Я запрограммировал масштабируемую галерею с несколькими изображениями.

  • Изображения можно увеличивать.
  • Увеличенные изображения можно перетаскивать.
  • Если изображениене масштабируется, галерею можно прокручивать.

Макет состоит из LinearLayout с TextView (название галереи) и самого Gallery.

Элемент в галерее состоит из RelativeLayout, содержащего FrameLayout с ImageView в нем (я читал, мне нужен FrameLayout для масштабирования) и TextView, чтобы показать состояние масштабирования изображения.

Я использовал пользовательский View.OnTouchListener для реализации масштабирования.

Теперь я пытался заменить изображение в ImageView после , галерея перестала прокручиватьс высоким разрешением изображения, так что пользователь может увеличивать изображение намного лучше / дальше.

Я сделал это с OnItemSelectedListener и setCallbackDuringFling в false.

Даже это отлично работает, если вы бросаетеэкран быстро.
Но если вы удерживаете палец на дисплее и перемещаете его медленно к краю,OnItemSelectedListener срабатывает до того, как следующий элемент достиг центра, и анимация прокрутки останавливается.Вместо этого галерея прыгает, как будто теряет сенсорный контакт, и сразу же центрирует следующий элемент в галерее.Также OnItemSelectedListener вызывается более одного раза для одного и того же элемента при медленном перемещении пальца (я избегаю этой проблемы, сохраняя позицию последнего выбранного элемента).

Итак ( Короче говоря ) Я искал обратный вызов / прослушиватель эффекта "прокрутка / привязка к сетке" Gallery.Я также попробовал AnimationListener, но галерея возвращает ноль, когда я звоню getAnimation.

Я в отчаянии ... может кто-нибудь помочь?

Ответы [ 2 ]

1 голос
/ 06 марта 2012

Проблема решена: теперь я использую android.support.v4.view.ViewPager с пользовательскими обратными вызовами в OnPageChangeListener:

  • onPageSelected
  • onPageScrollStateChanged
  • onPageScrolled
0 голосов
/ 01 октября 2011

Я рекомендую небольшое изменение в вашем методе.Для вашей галереи переопределите onScroll(MotionEvent, MotionEvent, float, float) и onFling(MotionEvent, MotionEvent, float, float), чтобы они вернули свое супер, но в MotionEvent.ACTION_DOWN ||MotionEvent.ACTION_UP устанавливает флаг перемещения на true ||false соответственно.

Теперь в BaseAdapter для вашей галереи в методе getView (int, View, ViewGroup) при возврате представления изображения возвращайте ImageView с низким разрешением, если флаг перемещения имеет значение true, иначе верните высокое разрешение.

...