实现功能:在网格布局下(GridLayoutManager),实现横向滚动,多行多列,分页滚动效果
1.重写SnapHelper类
import android.graphics.PointF;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v7.widget.LinearSmoothScroller;
import android.support.v7.widget.OrientationHelper;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.LayoutManager;
import android.support.v7.widget.RecyclerView.State;
import android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider;
import android.support.v7.widget.SnapHelper;
import android.util.DisplayMetrics;
import android.view.View;
/**
* Created by Muyuki on 2019/11/8
* 网格布局分页效果
* 仅限布局为GridLayoutManager使用
*/
public class GridPagerSnapHelper extends SnapHelper {
@Nullable
private OrientationHelper mVerticalHelper;
@Nullable
private OrientationHelper mHorizontalHelper;
private RecyclerView recyclerView;
private int rowCount = 1;
private int columCount = 1;
/**
* @param row 行
* @param column 列
*/
public GridPagerSnapHelper(int row,int column) {
this.rowCount = row;
this.columCount = column;
}
@Override
public void attachToRecyclerView(@Nullable RecyclerView recyclerView) throws IllegalStateException {
super.attachToRecyclerView(recyclerView);
this.recyclerView = recyclerView;
}
@Nullable
@Override
public int[] calculateDistanceToFinalSnap(@NonNull LayoutManager layoutManager, @NonNull View targetView) {
int[] out = new int[2];
if (layoutManager.canScrollHorizontally()) {
out[0] = this.distanceToStart(layoutManager, targetView, this.getHorizontalHelper(layoutManager));
} else {