RecycleView弹性滑动
还有点bug,建议使用 LinearSnapHelper
rvPilotList.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(@NonNull RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
// offsetY += dy;
//
// int first = linearLayoutManager.findFirstCompletelyVisibleItemPosition();
// int last = linearLayoutManager.findLastCompletelyVisibleItemPosition();
// View firstview = linearLayoutManager.findViewByPosition(first);
// if (viewWidth == 0) {
// viewWidth = firstview.getHeight();
// }
// int offseta = firstview.getTop();
// float sx = 1f + (float) offseta / viewWidth;
// if (offsetY == 0) {
// View view = linearLayoutManager.findViewByPosition(first + 1);
// scaleUp(view);
// }
//
// firstview.setScaleX(sx);
// View lastview = linearLayoutManager.findViewByPosition(last);
// offseta = recyclerView.getHeight() - lastview.getBottom();
// sx = 1f + (float) offseta / viewWidth;
// lastview.setScaleX(sx);
}
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
super.onScrollStateChanged(recyclerView, newState);
if (newState == 0) {
int visibleItem = linearLayoutManager.getChildCount();
int coun = 0;
if (visibleItem % 2 == 1) {
coun = (visibleItem - 1) / 2;
} else {
coun = visibleItem / 2;
}
Log.i(TAG, "onScrollStateChanged: " + visibleItem);
Log.i(TAG, "onScrollStateChanged: coun" + coun);
int postion = linearLayoutManager.findFirstVisibleItemPosition();
Log.i(TAG, "onScrollStateChanged: postion" + postion);
View view;
Log.i(TAG, "findFirstCompletelyVisibleItemPosition: " + linearLayoutManager.findFirstCompletelyVisibleItemPosition());
if (postion == 0 && linearLayoutManager.findFirstCompletelyVisibleItemPosition() != 0) {
view = linearLayoutManager.findViewByPosition(0);
} else {
view = linearLayoutManager.findViewByPosition(postion + coun);
}
int pm = ((ViewGroup) view.getParent()).getMeasuredWidth();
int left = view.getLeft() + view.getWidth() / 2;
int offset = 0;
if (left == pm / 2) {
return;
}
if (left < pm / 2) {
offset = -(pm / 2 - left);
} else {
offset = left - pm / 2;
}
rvPilotList.smoothScrollBy(offset, 0);
}
}
});

浙公网安备 33010602011771号