Есть ли способ сделать ViewPager
прокрутку не по горизонтали, а по вертикали ?!
android
android-viewpager
user1709805
источник
источник
Ответы:
Вы можете использовать ViewPager.PageTransformer, чтобы создать иллюзию вертикали
ViewPager
. Чтобы добиться вертикальной прокрутки вместо горизонтального перетаскивания, вам придется переопределитьViewPager
события касания по умолчанию и поменять местами координатыMotionEvent
s перед их обработкой, например:Конечно, вы можете настроить эти параметры по своему усмотрению. В итоге выглядит так:
источник
У меня есть решение, которое работает для меня в два этапа.
onInstantiateItem()
ofPagerAdapter
, создайте вид и поверните его на -90:Если пользуетесь
FragmentPagerAdapter
, то:Повернуть
ViewPager
вид на 90 градусов:Работает как шарм, по крайней мере, для моих требований.
источник
Вертикальный ViewPager
У всех других ответов здесь, похоже, были некоторые проблемы с ними. Даже рекомендованные проекты с открытым исходным кодом не объединяли недавние запросы на вытягивание с исправлениями ошибок. Затем я обнаружил
VerticalViewPager
от Google, что они использовали какое-то приложение DeskClock. Я доверяю использованию реализации Google намного больше, чем другие ответы, плавающие здесь. (Версия Google похожа на текущий ответ, получивший наибольшее количество голосов, но более подробный.)Полный пример
Этот пример почти такой же, как и мой базовый пример ViewPager , с небольшими изменениями, позволяющими использовать
VerticalViewPager
класс.XML
Добавьте макеты xml для основного действия и для каждой страницы (фрагмента). Обратите внимание, что мы используем,
VerticalViewPager
а не стандартныйViewPager
. Я включу код для этого ниже.activity_main.xml
fragment_one.xml
Код
Код
VerticalViewPager
не мой. Это просто урезанная версия (без комментариев) из исходного кода Google. Проверьте это, чтобы получить самую последнюю версию. Комментарии также полезны для понимания того, что происходит.VerticalViewPager.java
MainActivity.java
Я только поменял
VerticalViewPager
наViewPager
.Законченный
Вы должны иметь возможность запустить приложение и увидеть результат на анимации выше.
Смотрите также
источник
Для тех, кто пытается заставить вертикальный ViewPager работать внутри горизонтального, просто выполните следующие действия:
Вертикальный ViewPager
Горизонтальный ViewPager
источник
Небольшое расширение этого ответа помогло мне выполнить мои требования (вертикальный пейджер для анимации, как в Inshorts - Новости в 60 словах )
Надеюсь, это может быть полезно кому-то еще.
источник
Есть несколько проектов с открытым исходным кодом, которые утверждают, что это делают. Они здесь:
Они были отмечены их авторами как устаревшие:
И вот еще:
deskclock
приложения, но, похоже, он официально не поддерживается, так как я не могу найти для него документацию.источник
Проверьте это: https://github.com/JakeWharton/Android-DirectionalViewPager
Или вам может помочь следующий вопрос: Вертикальная «сетка со страницами» или «Viewpager»
источник
DirectionalViewPager
течение некоторого времени не обновлялся и, следовательно,ViewPager
в библиотеке поддержки отсутствуют некоторые новые функции ; то естьsetPageMargin(int)
. В общем, он должен работать. А если нет, не так сложно получить исходный кодViewPager
и поменять местами всю логику x / y и ширины / высоты.DirectionalViewPager
но, как сказал MH, он не обновляется (его разработчик считает УСТАРЕВШИМ) !! Невероятно, что разработчики Android предоставили сообществу не вертикальViewPager
, а только горизонт. Я новичок в Android, разработать вертикальнуюViewPager
замену x / y для меня не так просто .. я бы предпочел уже построенное решение .. в любом случае, спасибоПросто улучшение ответов от @Brett и @ Salman666, чтобы правильно преобразовать координаты (X, Y) в (Y, X), поскольку дисплеи устройств прямоугольные:
...
...
Тем не менее, что-то еще нужно сделать, чтобы улучшить отзывчивость сенсорного экрана. Проблема может быть связана с тем, что @msdark прокомментировал ответ @ Salman666.
источник
true
вonInterceptTouchEvent
и я также изменил привязок клавиш, так что с помощью DPad это вызывает свиток с UP / DOWN , а не влево / вправо: gist.github.com/zevektor/fbacf4f4f6c39fd6e409источник
Фактически он уже есть в исходниках Android . Я изменил его, чтобы он работал лучше:
источник
В настоящее время более активным репозиторием является lsjwzh / RecyclerViewPager .
RecyclerView
источник
Это реализация ViewPager с вертикальной прокруткой, хорошо работает с RecyclerView и ListView. гочонг / VerticalViewPager .
используйте ViewPager.PageTransformer, чтобы заставить ViewPager прокручиваться по вертикали, а также предоставьте View.OnTouchListener для разрешения конфликта прокрутки.
источник
Даже я столкнулся с той же проблемой, когда ViewPager стал вертикальным, поменяв местами X и Y. Это было совсем не гладко.
Это потому, что раньше он работал только тогда, когда угол прокрутки был меньше 7,125 градуса = arctan (1/8) при перехвате и 14 градусов = arctan (1/4) при касании; как исходный ViewPager горизонтальный, работает, когда угол прокрутки меньше 26,565 градусов = arctan (1/2) при перехвате и 45 градусов = arctan (1) при касании.
Вот почему я скопировал код Android support-core-ui и переместил значения в переменные, которые умножил с помощью отражения.
Пожалуйста, найдите код и README на https://github.com/deepakmishra/verticalviewpager и VerticalViewPager на https://github.com/deepakmishra/verticalviewpager/blob/master/app/src/main/java/com/viewpager/VerticalViewPager. .Ява
источник
лучший способ - повернуть окно просмотра на 90 градусов и использовать constraintLayout для настройки местоположения.
источник
В итоге я создал новый DirectionalViewPager, который может прокручиваться либо по вертикали, либо по горизонтали, потому что все решения, которые я здесь видел, имеют недостатки:
Существующие реализации VerticalViewPager (от castorflex и LambergaR)
Трюк с преобразованием с заменой координат
VelocityTracker.computeCurrentVelocity
перестановке координат скорость по-прежнему вычисляется по оси X, вероятно, потому, что это внутренне использует собственный вызов, который игнорирует обмен координатами.Просмотр вращения
источник