Виджет ViewPager позволяет создавать UI с изменяющимися фрагментами, которые можно "перелистывать" с помощью свайпов влево или вправо. Виджет ViewPager можно использовать совместно с TabLayout для добавления закладок.
Рассмотрим использование виджета ViewPager на примере.
Создадим новый проект и отредактируем макет MainActivity. Добавим в макет элемент TabLayout и ViewPager.
Метод TabLayout.setupWithViewPager() настраивает использование TabLayout совместно с ViewPager.
Для работы ViewPager необходимо создать класс адаптера, который будет поставлять виджету фрагменты. В качестве класса фрагмента будем использовать DetailsFragment из предыдущего примера.
После написания класса адаптера, добавим объект с помощью метода setAdapter().
Класс адаптера наследуется от класса FragmentPagerAdapter. Нам необходимо передать в конструктор адаптера объект FragmentManager (так как мы будем управлять фрагментами). Кроме этого, нам необходимо установить количество фрагментов, установить заголовок фрагмента для закладок, а также запрограммировать метод getItem(), который возвращает объект i-го фрагмента.
Запустим приложение и посмотрим на результат
Виджет ViewPager позволяет гибко настроить процесс перелистывания фрагментов. К примеру, вы можете создать класс-наследник базового класса ViewPager.PageTransformer, который позволяет настроить анимацию смены фрагментов.
На сайте разработчиков Android скопируем класс ZoomOutPageTransformer
ZoomOutPageTransformer.java
publicclassZoomOutPageTransformerimplementsViewPager.PageTransformer {privatestaticfinalfloat MIN_SCALE =0.85f;privatestaticfinalfloat MIN_ALPHA =0.5f;publicvoidtransformPage(View view,float position) {int pageWidth =view.getWidth();int pageHeight =view.getHeight();if (position <-1) { // [-Infinity,-1)// This page is way off-screen to the left.view.setAlpha(0f); } elseif (position <=1) { // [-1,1]// Modify the default slide transition to shrink the page as wellfloat scaleFactor =Math.max(MIN_SCALE,1-Math.abs(position));float vertMargin = pageHeight * (1- scaleFactor) /2;float horzMargin = pageWidth * (1- scaleFactor) /2;if (position <0) {view.setTranslationX(horzMargin - vertMargin /2); } else {view.setTranslationX(-horzMargin + vertMargin /2); }// Scale the page down (between MIN_SCALE and 1)view.setScaleX(scaleFactor);view.setScaleY(scaleFactor);// Fade the page relative to its size.view.setAlpha(MIN_ALPHA + (scaleFactor - MIN_SCALE) / (1- MIN_SCALE) * (1- MIN_ALPHA)); } else { // (1,+Infinity]// This page is way off-screen to the right.view.setAlpha(0f); } }}
Создадим объект этого класса и передадим его в ViewPager с помощью метода setPageTransformer().