Я пытаюсь сделать макет, похожий на то, как работает макет фильтра Instagram. В основном, когда вы выбираете фильтр, он будет прокручиваться до выбранного вами элемента + 1, показывая, что есть больше фильтров.LinearLayoutManager плавный прокрутки перескакивает в неправильное положение
В настоящее время я пытаюсь построить пользовательский LinearLayoutManager
для моей горизонтальной RecyclerView
здесь:
public class LinearLayoutSnapManager extends LinearLayoutManager {
private int mCurrentPos = 0;
public LinearLayoutSnapManager(Context context) {
super(context);
}
public LinearLayoutSnapManager(Context context, int orientation, boolean reverseLayout) {
super(context, orientation, reverseLayout);
}
public LinearLayoutSnapManager(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
}
public void snap(RecyclerView rv, int position) {
if (mCurrentPos == position) {
// No move
return;
}
boolean goingRight = true;
if (position < mCurrentPos) {
goingRight = false;
}
mCurrentPos = position;
smoothScrollToPosition(rv, new RecyclerView.State(), goingRight ? getScrollRightPos(): getScrollLeftPos());
}
private int getScrollLeftPos() {
int newPos = mCurrentPos - 1;
return (newPos > 0) ? newPos : 0;
}
private int getScrollRightPos() {
return mCurrentPos + 1;
}
}
скроллинг слева работает так же, как предназначенные, но когда я прокрутки вправо кажется просто перейти в конец списка против newItem + 1, и я не могу понять, почему это происходит.
Не могли бы вы разместить больше кода, я имею в виду, как вы используете эти методы? Ваша логика кажется прекрасной, но вы можете передать позицию в неподходящий момент, то есть – FabioR
Это может быть так, что когда вызывается 'getScrollRightPos', старая (и не обновляемая) позиция передается в mCurrentPos, поэтому она прокручивается до OLD position + 1 (что может быть в конце recyclerview). Также мне кажется, что у вас есть проблема, когда вы нажимаете элементы, которые не смежны с текущим элементом, является ли свиток, работающий в этих случаях? – FabioR
Кто вызывает 'snap()'? Откуда появляется int позиция? – g4s8