ViewPager с несколькими PageTransformer (PageTransformers во время выполнения)

У меня есть особое требование к моему ViewPager. Я хочу, чтобы мой пейджер по умолчанию имел горизонтальный pageTransformer, например DepthPageTransformer. . Теперь на экране у меня есть кнопка, при нажатии которой я хочу, чтобы моя текущая страница скользила сверху вниз, а моя следующая страница заменяла ее, как VerticalPageTransformer, и как только страница изменится, преобразователь страницы должен быть изменен обратно на DepthPageTransformer по умолчанию. .

Итак, в основном я хочу применять pageTransformers во время выполнения. Любая помощь приветствуется.

Вот мой код:

//sets intial page transformer
viewPager.setPageTransformer(false,new DepthPageTransformer());

Теперь, когда я нажимаю кнопку в onCLick, у меня есть:

//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: изменения прикреплены


person Atul O Holic    schedule 27.07.2015    source источник
comment
Вы можете установить преобразователь, используя mViewPager.setPageTransformer(false,transformer); Так в чем проблема?   -  person Ramandeep Nanda    schedule 30.07.2015
comment
Вы пробовали это: - github.com/JakeWharton/Android-DirectionalViewPager   -  person Adarsh Yadav    schedule 30.07.2015
comment
Нет, но я прочитал его, и, поскольку его поддержка была прекращена, я сомневаюсь, что он охватывает недавние изменения в ViewPager.   -  person Atul O Holic    schedule 30.07.2015
comment
Можете ли вы уточнить свои потребности? Или закрыть вопрос, поскольку (как предложил @RamandeepNanda) вы можете изменить преобразование одним вызовом метода?   -  person Mimmo Grottoli    schedule 30.07.2015
comment
Отредактировано, надеюсь, это более понятно.   -  person Atul O Holic    schedule 30.07.2015


Ответы (1)


Это не лучший проект в моей жизни, но вы можете найти эталонную реализацию, загрузив этот zip-файл< /а>. Это проект Android Studio, где в основном я использовал:

mPager.beginFakeDrag()
mPager.fakeDragBy(float val);
mPager.endFakeDrag();

в сочетании с Animation для имитации плавной прокрутки ViewPager. ViewPager имеет DepthPageTransformer по умолчанию на 5 страниц. Когда вы нажимаете нижнюю кнопку «Click Me», страница добавляется в ViewPager, PageTransformer изменяется на FlipVerticalTransformer, и выполняется перетаскивание с помощью методов, о которых я упоминал ранее.

Я внес несколько изменений в код для реализации VerticalSlide. Я считаю, что ответ может быть принят сейчас :)

person Mimmo Grottoli    schedule 31.07.2015
comment
Спасибо, попробую :) - person Atul O Holic; 31.07.2015
comment
Эй, я отредактировал свой вопрос. Можете ли вы проверить прикрепленный файл? Тот, который вы предоставили, работает очень хорошо, но когда я добавил VerticalPageTransformer, он дал ту же проблему сжатия и затемнения - person Atul O Holic; 31.07.2015
comment
Получите zip по новой ссылке. Глубоко не проверял, но думаю, что сейчас это именно то, что нужно. И я считаю, что вы можете изменить его, чтобы он соответствовал всем вашим требованиям. - person Mimmo Grottoli; 31.07.2015
comment
Удалось ли вам решить проблему, о которой я упоминал? - person Atul O Holic; 31.07.2015
comment
Да, с вашим кодом, а не с тем, который я модифицировал. Смотрите мой обновленный ответ, есть новая ссылка - person Mimmo Grottoli; 31.07.2015
comment
Ой извините не видел. Я быстро проверю это. Большое спасибо - person Atul O Holic; 31.07.2015
comment
Давайте продолжим обсуждение в чате. - person Atul O Holic; 31.07.2015