ViewPager с несколькими PageTransformer (PageTransformers во время выполнения)
У меня есть пользовательское требование с моим ViewPager. Что мне нужно, так это то, что мой пейджер должен иметь горизонтальный трансформер страницы, такой как DepthPageTransformer по умолчанию. Теперь на экране у меня есть кнопка, при нажатии которой я хочу, чтобы моя текущая страница скользила сверху снизу, а моя следующая страница заменяла ее на VerticalPageTransformer, и как только страница менялась, преобразователь страницы должен быть заменен на DepthPageTransformer по умолчанию.
В общем, я хочу применить pageTransformers во время выполнения. Любая помощь приветствуется.
Вот мой код:
//sets intial page transformer
viewPager.setPageTransformer(false,new DepthPageTransformer());
Теперь, когда я нажимаю кнопку в ее клике, у меня есть:
//sets vertical page transformer
viewPager.setPageTransformer(false,new VerticalPageTransformer());
viewPager.setCurrentItem(viewPager.getCurrentItem() + 1);
Затем в моем onPageSelected() я установил его обратно в начальный
@Override
public void onPageSelected(int position) {
viewPager.setPageTransformer(false,new DepthPageTransformer());
}
Звучит все просто и правильно, но преобразования страниц не совсем гладкие. Они ведут себя странно. Страницы сжимаются со временем. Изменение страницы происходит так быстро, что никто даже не видит трансформации.
Изменить для @Mimmo: изменения прилагаются
2 ответа
Это не лучший проект в моей жизни, но вы можете найти эталонную реализацию, скачав этот zip-файл. Это проект Android Studio, где я в основном использовал:
mPager.beginFakeDrag()
mPager.fakeDragBy(float val);
mPager.endFakeDrag();
в сочетании с анимацией для имитации плавной прокрутки ViewPager. ViewPager имеет DepthPageTransformer по умолчанию на 5 страниц. Когда вы нажимаете нижнюю кнопку "Click Me", страница добавляется в ViewPager, PageTransformer изменяется на FlipVerticalTransformer, и перетаскивание выполняется с помощью методов, которые я упоминал ранее.
Я сделал некоторые изменения в коде, чтобы реализовать VerticalSlide. Я считаю, что ответ можно принять сейчас:)
Сегодня вы можете использовать
Делаем так:
viewPager.setPageTransformer(
CompositePageTransformer().apply {
addTransformer(MarginPageTransformer(resources.getDimensionPixelOffset(R.dimen.default_margin_double)))
addTransformer(ScaleDownPageTransformer(.9f))
}
)