- Русские Блоги
- Исследование OnScrollListener события прокрутки RecyclerView
- (1) Классификация катящихся событий
- (2) Следите за прокруткой RecyclerView
- (3)OnScrollListener
- 3.1 метод onScrollStateChanged (RecyclerView recyclerView, int newState)
- 3.2 метод onScrolled (RecyclerView recyclerView, int dx, int dy)
- Обнаружение начала и конца прокрутки в recyclerview
- 7 ответов
- Реализация списка с заголовком, футером и пагинацией в Андроид
- RecyclerView
- Настройка Gradle
- Добавление RecyclerView в XML представление
- Привязка XML с классом JAVA
- RecyclerView ItemDecoration
- RecyclerView Adapter
- Пагинация
- Прокрутите RecyclerView, чтобы показать выбранный элемент сверху
- 12 ответов
- RecyclerView горизонтальная прокрутка в центре
Русские Блоги
Исследование OnScrollListener события прокрутки RecyclerView
(1) Классификация катящихся событий
Прокрутка списка обычно делится на два типа:
Изменения статуса вышеупомянутого процесса следующие:
(2) Следите за прокруткой RecyclerView
Есть два способа отслеживать события прокрутки:
Среди них setOnScrollListener устарел из-за риска использования нулевых указателей. Рекомендуется использовать addOnScrollListener.
(3)OnScrollListener
Класс OnScrollListener — это абстрактный класс с двумя методами:
3.1 метод onScrollStateChanged (RecyclerView recyclerView, int newState)
Значение двух переменных обратного вызова:
recyclerView: RecyclerView в данный момент прокручивается
newState: текущее состояние прокрутки.
Среди них newState имеет три значения:
3.2 метод onScrolled (RecyclerView recyclerView, int dx, int dy)
Значение трех переменных обратного вызова:
recyclerView: текущий вид с прокруткой
dx: расстояние горизонтальной прокрутки
dy: расстояние вертикальной прокрутки
dx > 0 Когда палец прокручивается влево,Список прокручивается, чтобы отобразить содержимое справа
dx 0 Когда палец прокручивается вверх,Список прокручивается, чтобы отобразить следующее содержимое
dy = общее количество элементов
Таким образом, можно судить, что он находится внизу.
к
visibleItemCount + pastVisiblesItems) >= totalItemCount
, чтобы определить, является ли это дном.
Источник
Обнаружение начала и конца прокрутки в recyclerview
Мне нужно определить начало / конец и направление прокрутки в recyclerview. У прослушивателя прокрутки есть два метода: onScrolled() и onScrollStateChanged() . Первый метод вызывается после запуска прокрутки (действительно, вызывается onScrolled (), а не onScrolling ()). Второй метод дает информацию о состоянии, но у меня нет информации о направлении. Как я могу достичь своей цели?
7 ответов
Шаг 1 Вы можете создать класс, расширяющий RecyclerView.OnScrollListener, и переопределить эти методы
Шаг 2- Поскольку setOnScrollListener устарел, лучше использовать addOnScrollListener
Вот полное решение для выполнения действия после остановки прокрутки (для RecyclerView)
Который исправил мое исключение OutOfBounds, связанное с прокруткой recyclerView
Думаю, другие ответы не касаются вашей болевой точки.
О вопросе
Как вы сказали, RecycleView вызовет onScrollStateChanged () перед методом onScrolled (). Однако метод onScrollStateChanged () может сообщить вам только три состояния RecycleView:
- SCROLL_STATE_IDLE
- SCROLL_STATE_DRAGGING
- SCROLL_STATE_SETTLING
Это означает, что предположим, что RecycleView сейчас находится наверху, если пользователь прокручивает страницу вверх, он может запускать только метод onScrollStateChanged() , но не метод onScrolled() . И если пользователь прокручивает страницу вниз, сначала запускается метод onScrollStateChanged() , а затем метод onScrolled() .
Затем возникает проблема: SCROLL_STATE_DRAGGING может только сказать вам, что пользователь перетаскивает представление, но не может сказать направление его перетаскивания.
Вы должны объединить с методом dy from onScrolled() для определения направления перетаскивания, но onScrolled() не запускается с onScrollStateChanged() .
MySolution:
Запишите состояние прокрутки при срабатывании onScrollStateChanged() , затем задержите время, например 10 мс, проверьте, есть ли движение по оси Y, и сделайте вывод о направлении перетаскивания.
Источник
Реализация списка с заголовком, футером и пагинацией в Андроид
RecyclerView
RecyclerView — это расширенная версия ListView с некоторыми улучшениями в производительности и с новыми функциями. Как следует из названия, RecyclerView перерабатывает или повторно использует представления элементов при прокрутке. В RecyclerView гораздо проще добавлять анимации по сравнению с ListView. В этом уроке мы разберем, как создать RecyclerView с заголовком, футером, разбиением на страницы и анимацией.
Настройка Gradle
Добавьте следующую зависимость в файл build.gradle:
Добавление RecyclerView в XML представление
После того, как проект будет синхронизирован, добавьте компонент RecyclerView в ваш макет:
Привязка XML с классом JAVA
Теперь в методе onCreate вашей активности добавьте следующий код:
Прежде чем идти дальше, давайте подробно рассмотрим приведенный выше код
- Layout Manager — Простыми словами, Layout Manager помогает нам определить структуру нашего RecyclerView. Есть три встроенных Layout Managers. Помимо этого, мы можем создать собственный пользовательский Layout Manager, чтобы удовлетворить наши требования.
- LinearLayoutManager показывает элементы в списке с вертикальной или горизонтальной прокруткой.
- GridLayoutManager показывает элементы в сетке.
- StaggeredGridLayoutManager показывает элементы в шахматной сетке.
RecyclerView ItemDecoration
ItemDecoration позволяет приложению добавлять специальный полосы и смещения к определенным представлениям элементов из набора данных адаптера. Это может быть полезно для рисования разделителей между элементами, выделениями, границами визуальной группировки и т. д. – developer.android.com
В этом примере мы будем использовать ItemDecoration для добавления отступов к каждому элементу.
В вышеприведенном классе мы устанавливаем отступы к нулевому элементу.
RecyclerView Adapter
Теперь давайте настроим адаптер ReeyclerView с заголовком и футером.
Пагинация
Теперь, когда адаптер готов, давайте посмотрим, как добавить пагинацию в список RecyclerView. Это довольно легко сделать и должно быть добавлено в onCreate после установки Adapter to Recycler-View.
Всякий раз, когда данные изменяются в mList, вызывайте функцию ниже, чтобы обновить адаптер RecyclerView и показать новые данные.
Надеюсь, что этот пост поможет вам получить общее представление о настройке RecyclerView с заголовком, подвалом и пагинацией.
Источник
Прокрутите RecyclerView, чтобы показать выбранный элемент сверху
Я ищу способ прокрутки RecyclerView чтобы показать выбранный элемент сверху.
на ListView я смог сделать это, используя scrollTo(x,y) и получение верхней части элемента, который должен быть центрирован.
проблема в том, что RecyclerView возвращает ошибку при использовании это scrollTo способ сказать
RecyclerView не поддерживает прокрутку до абсолютной позиции
как может Я прокручиваю RecyclerView чтобы поместить выбранный элемент в верхнюю часть представления?
12 ответов
Если вы используете LinearLayoutManager или StaggeredGridLayoutManager, у каждого из них есть scrollToPositionWithOffset метод, который принимает как положение, так и смещение начала элемента с начала RecyclerView, который, похоже, выполнит то, что вам нужно (установка смещения на 0 должна совпадать с верхней).
Если вы ищете вертикальный LinearLayout Manager, вы можете добиться плавной прокрутки с помощью пользовательского LinearSmoothScroller :
используйте экземпляр layoutmanager в представлении recycle, а затем вызовите recyclerView.smoothScrollToPosition(pos); сгладит прокрутку до выбранной позиции в верхней части представления recycler
/ / прокрутить пункт pos
вам просто нужно позвонить recyclerview.scrollToPosition(position) . Это прекрасно!
Если вы хотите вызвать его в адаптере, просто пусть ваш адаптер имеет экземпляр recyclerview или действие или фрагмент, который содержит recyclerview, чем реализует метод getRecyclerview() в них.
Я надеюсь, это может помочь вам.
то же самое с регулятор скорости
попробуйте то, что сработало для меня круто!
создать переменную private static int displayedposition = 0;
Теперь для позиции вашего RecyclerView в вашей деятельности.
поместите эту инструкцию туда, где вы хотите разместить бывший сайт, отображаемый в вашем представлении .
Ну вот и все, это сработало отлично для меня \o/
что я сделал, чтобы восстановить положение прокрутки после обновления RecyclerView на кнопку нажал:
получение смещения первого видимого элемента сверху перед созданием объекта linearLayoutManager и после его создания вызывался объект scrollToPositionWithOffset объекта LinearLayoutManager.
прокрутка в определенной позиции
и это мне очень помогло. с помощью click listener вы можете получить позицию в вашем адаптере
В моем случае мой RecyclerView есть отступ сверху такой
затем для прокрутки элемента вверх, мне нужно
Источник
RecyclerView горизонтальная прокрутка в центре
Я пытаюсь сделать вид с карусели здесь, используя RecyclerView, я хочу, чтобы элемент защелкнул середину экрана при прокрутке, по одному элементу за раз. Я пробовал использовать recyclerView.setScrollingTouchSlop(RecyclerView.TOUCH_SLOP_PAGING);
Но «просмотр по-прежнему прокручивается гладко, я также пытался реализовать свою собственную логику, используя прослушиватель прокрутки:
Теперь салфетка справа налево работает нормально, но не наоборот, что мне здесь не хватает?
С LinearSnapHelper это сейчас очень просто.
Все, что вам нужно сделать, это:
Обновить
Доступный с 25.1.0, PagerSnapHelper может помочь достичь эффекта ViewPager . Используйте его так же, как вы бы использовали LinearSnapHelper .
Старое обходное решение:
Если вы хотите, чтобы он был похож на ViewPager , попробуйте это вместо этого:
Выполнение выше просто возвращает позицию рядом с текущим элементом (в центре) в зависимости от направления скорости, независимо от величины.
Первый – это первое партийное решение, включенное в библиотеку поддержки 24.2.0. Это означает, что вы должны добавить это в build.gradle вашего модуля build.gradle или обновить его.
Важное обновление:
Google реализовал это в Android Support Library 24.2.0 (выпущен в августе 2016 года). В примечаниях к выпуску говорится следующее:
RecyclerView.OnFlingListener добавлен для поддержки пользовательского поведения в ответ на flings. Класс SnapHelper обеспечивает реализацию специально для привязки дочерних представлений, а класс LinearSnapHelper расширяет эту реализацию, чтобы обеспечить выравнивание по центру, похожее на ViewPager .
Заметьте, что я еще не пытался использовать LinearSnapHelper . Я все еще использую свое решение, которое отлично работает.
Оригинальный ответ:
После многих часов попыток ViewPager трех различных решений в SO я, наконец, создал решение, которое очень близко имитирует поведение, обнаруженное в ViewPager .
Решение основано на решении @eDizzle, которое, по моему мнению, я улучшило, чтобы сказать, что оно работает почти как ViewPager .
Вот как это выглядит:
Важно: ширина элемента RecyclerView точно такая же, как на экране. Я не пробовал с другими размерами. Также я использую его с горизонтальным LinearLayoutManager . Я думаю, что вам нужно будет адаптировать код, если вы хотите вертикальную прокрутку.
Здесь у вас есть код:
Вы должны использовать findFirstVisibleItemPosition для перехода в противоположном направлении. И для определения того, в каком направлении находился салфетка, вам нужно получить либо скорость движения, либо изменение x. Я подошел к этой проблеме немного под другим углом, чем у вас.
Создайте новый класс, который расширяет класс RecyclerView, а затем переопределяет метод Fling RecyclerView следующим образом:
Если цель состоит в том, чтобы заставить RecyclerView имитировать поведение ViewPager существует довольно простой подход
Используя PagerSnapHelper вы можете получить такое поведение, как ViewPager
Я передаю этот менеджер компоновки в RecycledView и устанавливаю смещение, необходимое для элементов центра. Все мои предметы имеют одинаковую ширину, поэтому постоянное смещение в порядке
Источник