2016-08-09 2 views
2

У меня есть два ViewPager s - один под другим. Теперь клиент хочет, чтобы мы добавили возможность развернуть нижнюю ViewPager (с тремя ListView s), чтобы наложить верхнюю часть ViewPager. Когда я положил оба ViewPager s в ScrollView, ListView s в нижней части ViewPager перестали работать. Сначала я помещал их в RelativeLayout и добавлял верхнее дополнение ко всем ListView s и устанавливал фон null, но тогда верхняя ViewPager не была доступна для клика (хотя и видимая). Как я могу заставить это работать?Как наложить ViewPager на другой ViewPager

enter image description here

+0

Какое действие пользователя означает красная стрелка? Это «прокрутка», когда конец нижнего «ListView» достигнут »?Или любой прокрутка выталкивает верхний 'ViewPager'? – kalabalik

+0

И это «все или ничего» для верхнего 'ViewPager'? Или вы хотите, чтобы он отображался частично, когда он не был полностью прокручен или включен? – kalabalik

+0

Начало прокрутки должно вытолкнуть верхний ViewPager или закрыть его. Я хочу показать его частично, когда вы поднимаетесь или закрываетесь снизу ViewPager. –

ответ

0

Это сложно, и я могу отсутствовать некоторые шаги, но по сути то, что вам нужно сделать, это следующее:

  • Поместите два ViewPager сек в LinearLayout. Пока родитель будет соответствовать его родительскому по высоте, дети будут завернуты.
  • Внесите AbsListView.OnScrollListener и установите OnScrollListener ваших трех ListView s для этой реализации.
  • В этой реализации (либо в onScrollStateChanged(AbsListView view, int scrollState), либо в onScroll(final AbsListView listView, int firstVisibleItem, int visibleItemCount, int totalItemCount) вам придется сами это выяснить) получить дельта текущего и старого положения прокрутки - получить расстояние и направление (по существу, правильный знак) свиток.
  • Измените координату y ваших двух ViewPager s соответственно, управляя краевыми случаями.
0

Проблема была очень интересной, и я добавил project at Github, пытаясь решить проблему самостоятельно. Вы можете клонировать проект и запускаться, чтобы узнать, что произойдет.

Идея состоит в том, чтобы иметь два ViewPager внутри NestedScrollView и ViewPager внизу, содержащий RecyclerView.

Вам нужно помнить, что он будет работать только с RecyclerView 23.2.0 и выше. Так что вам нужно добавить следующее в ваш build.gradle

compile 'com.android.support:recyclerview-v7:23.2.0' 

Хотя NestedScrollView служит цели, он генерирует некоторое нежелательное поведение тоже. Например, список внизу ViewPager автоматически прокручивается вниз, когда список заполняется. Поэтому я должен был добавить следующее в мой MainActivity

mNestedScrollView.smoothScrollTo(0, 0); 

Вы должны обращаться с надлежащей прокруткой здесь, когда фрагменты прокатывается в ViewPager каждый раз. Я добавил onPageChangeListener с обоими ViewPager и добавил комментарии там.

Еще одна вещь, которую вы должны иметь в виду, что в главном файле макета, который является activity_main.xml, мне нужно было сохранить высоту как ViewPager, так и исправленную. Вы можете рассмотреть возможность изменения layout_height согласно вашему требованию.

Cheers!

Смежные вопросы