Странный эффект со скольжением ViewPager - PullRequest
0 голосов
/ 10 марта 2020

Как я описал в ответе на это мое сообщение GridView анимированное ГОРИЗОНТАЛЬНОЕ скольжение У меня есть собственный календарь, сделанный из ViewPager и GridViews для каждого из 3 представлений ViewPager.

I ' Мы создали «универсальный» InfinitePagerAdapter, расширяющий PagerAdapter. И мой CalendarPagerAdapter расширяет этот InfinitePagerAdapter.

У меня есть адаптеры для каждого из 3 GridView (по одному на каждой странице 3 страниц ViewPager)

В настоящее время у меня есть следующий странный эффект:

  1. Я двигаюсь вправо и влево (пальцем), и все в порядке: Sliding is just fine Страница, на которую я скользлю (предыдущая / следующая), раздута, и я вижу, что она прекрасно работает во время слайд.

Но:

В какой-то неопределенный момент скольжение выглядит следующим образом: prev/next page is not inflated Страница, на которую я перемещаюсь (предыдущая / следующая), не раздувается, и я вижу белую страницу во время скольжения. Когда скольжение закончено, страница надувается очень хорошо.

Первый поворот Я подумал, что мой "трюк страниц" в InfiniteViewPagerAdapter недостаточно быстр, например, если слайд "слишком быстрый" несколько страниц и c .

Но тот же эффект я получаю, если просто поставить кнопки "prev" / "next" и прокрутить ViewPager по коду: ViewPager.setCurrentItem (position, true); Каждый слайд после этой команды имеет описанный странный эффект (не раздутая страница). Я пытался «принудительно» сделать недействительными все страницы на каждом слайде и т. Д. c. но пока ничего.

1 Ответ

0 голосов
/ 23 марта 2020

Я нашел простое решение, которое вполне подходит для моей задачи:

В начале сразу после установки адаптера я установил текущий элемент в Integer.MAX_VALUE / 2

    pager.setAdapter(adapter);
    pager.setCurrentItem(Integer.MAX_VALUE / 2);

I Я отбросил идею повторного использования представления 3 страниц, хранящихся в памяти, поэтому я просто 1. Создаю представление в instantiateItem (...) и добавлю его в контейнер:

view = inflateView(.....)
container.add(view)

2. Удалить его из контейнера в destroyItem (...) container.remove (view)

...