Я попытался добавить прослушиватель прокрутки для просмотра переработчика и сделал некоторую логику, но я не могу прокручивать один элемент за раз. Я немного поискал в Интернете, но у меня есть сторонняя библиотека, которая имеет настраиваемый вид ресайклера. Можем ли мы реализовать прокрутку одного элемента за раз в режиме просмотра ресайклера? Если да подскажите как? Пролистывайте по одному элементу, как на этом изображении.
Проведите по одному элементу за раз Recyclerview
Ответы (3)
Уже поздно, я знаю.
Существует очень простой способ получить требуемое поведение прокрутки с помощью пользовательского SnapHelper.
Создайте свой собственный SnapHelper, перезаписав стандартный (android.support.v7.widget.LinearSnapHelper).
public class SnapHelperOneByOne extends LinearSnapHelper{
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY){
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if( currentView == null ){
return RecyclerView.NO_POSITION;
}
final int currentPosition = layoutManager.getPosition(currentView);
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
Это в основном стандартный метод, но без добавления счетчика прыжков, который рассчитывается по скорости прокрутки.
Если вы проводите быстро и долго, следующее (или предыдущее) представление будет центрировано (показано).
Если вы проведете пальцем медленно и коротко, текущий центрированный вид останется в центре после отпускания.
Я надеюсь, что этот ответ все еще может помочь кому-нибудь.
PagerSnapHelper()
вместо LinearShapHelper()
- person Bilal Kazi; 07.05.2020
Это смягчает движение между элементами:
public class SnapHelperOneByOne extends LinearSnapHelper {
@Override
public int findTargetSnapPosition(RecyclerView.LayoutManager layoutManager, int velocityX, int velocityY) {
if (!(layoutManager instanceof RecyclerView.SmoothScroller.ScrollVectorProvider)) {
return RecyclerView.NO_POSITION;
}
final View currentView = findSnapView(layoutManager);
if (currentView == null) {
return RecyclerView.NO_POSITION;
}
LinearLayoutManager myLayoutManager = (LinearLayoutManager) layoutManager;
int position1 = myLayoutManager.findFirstVisibleItemPosition();
int position2 = myLayoutManager.findLastVisibleItemPosition();
int currentPosition = layoutManager.getPosition(currentView);
if (velocityX > 400) {
currentPosition = position2;
} else if (velocityX < 400) {
currentPosition = position1;
}
if (currentPosition == RecyclerView.NO_POSITION) {
return RecyclerView.NO_POSITION;
}
return currentPosition;
}
}
Пример:
LinearSnapHelper linearSnapHelper = new SnapHelperOneByOne();
linearSnapHelper.attachToRecyclerView(recyclerView);
https://github.com/googlesamples/android-HorizontalPaging/
Это ссылка на что-то похожее на то, что вы показали на изображениях. Дайте мне знать, если вы ищете что-то еще, и я свяжу соответствующие библиотеки.
В основном разница между ViewPager и recyclerView заключается в том, что в recyclerView вы переключаетесь между многими элементами, а в ViewPager вы переключаетесь между многими фрагментами или самими независимыми страницами.
Я вижу, вы используете этот https://github.com/lsjwzh/RecyclerViewPager. случае вы имеете в виду?