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))
            }
)
Другие вопросы по тегам