2015-04-18 4 views
2

Я пытался понять это самостоятельно, но никаких шансов.Recyclerview as Snappy Gallery

Мне нужно, чтобы RecyclerView (горизонтальная прокрутка) всегда показывал 3 предмета. И всякий раз, когда пользователь бросает или прокручивает влево и вправо, он должен привязываться к следующим 3 предметам, если они есть. Я просто ищу простейшее решение, если оно есть.

Я нашел решения для галереи с одним предметом, но мне нужно 3 предмета. Я знаю, что это возможно, но я не мог понять, как это сделать. Во-первых, LayoutManager должен рассчитать ширину элемента, чтобы он соответствовал ширине устройства. И я думаю, мне нужно как-то использовать RecyclerView.OnScrollListener.

Кто-нибудь может помочь мне здесь?

ответ

1

У меня был подобный случай использования, и я получил хорошие результаты, используя предложения в этой теме SO:

Snappy scrolling in RecyclerView

Кончилось это: использовать пользовательский RecyclerView.OnScrollListener для обнаружения, когда состояние прокрутки изменения SCROLL_STATE_IDLE, в этот момент используется подкласс LayoutManager, который реализует getFixScrollPos() для вычисления, а затем прокручивается до правильной позиции, привязывая процесс.

Я также мог использовать атрибут styleable для установки количества элементов в строке во время разработки. Возможно, вы захотите это сделать.

0

Правильно ли я полагаю, что каждая страница галереи является вертикальным списком из 3 предметов?

Позвоните getWidth() и getHeight() в пределах вашего переопределения LayoutManager.onMeasure(Recycler, int, int, int), чтобы получить фактический размер ресайклера. Затем вы можете использовать это в onLayoutChildren(), чтобы выяснить, насколько велики должны быть дети.

Что касается прокрутки к следующим представлениям, я не совсем уверен. Может быть, добавить заказ OnScrollListener в RecyclerView, как в RecyclerView horizontal snap in center?

6

С LinearSnapHelper это стало очень легко.

Все, что вам нужно сделать, это:

SnapHelper helper = LinearSnapHelper(); 
helper.attachToRecyclerView(recyclerView); 

Это так просто! Обратите внимание, что LinearSnapHelper был добавлен в библиотеку поддержки, начиная с версии 24.2.0.