1

我正在尝试为我的水平 recyclerView 实现捕捉机制,并且我正在使用代码来执行此操作。

但是我所有的子项目之间似乎有一些空间。请看下面的截图(我还不允许嵌入图片,所以请检查链接):

在此处输入图像描述

我不确定为什么我的子项目之间有间距。我认为它与下面的代码有关:

private void setMarginsForChild(View child) {
    int lastItemIndex = getLayoutManager().getItemCount() - 1;
    int childIndex = getChildPosition(child);
    if(childIndex != -1) ((SampleAdapter)getAdapter()).setSelection(childIndex);
    int startMargin = childIndex == 0 ? getMeasuredWidth() / 2 : getMeasuredWidth() / 2;
    int endMargin = childIndex == lastItemIndex ? getMeasuredWidth() / 2 : getMeasuredWidth() / 2;

    //RTL works for API 17+
    if (ViewCompat.getLayoutDirection(child) == ViewCompat.LAYOUT_DIRECTION_RTL) {
        // The view has RTL layout
        ((ViewGroup.MarginLayoutParams) child.getLayoutParams()).setMargins(endMargin, 0, startMargin, 0);
    } else {
        // The view has LTR layout
        ((ViewGroup.MarginLayoutParams) child.getLayoutParams()).setMargins(startMargin, 0, endMargin, 0);
    }
    child.requestLayout();
}

但如果我不为子项目设置边距,recyclerView 项目不会捕捉到屏幕的中心。有人可以帮我指出正确的方向吗?

4

2 回答 2

0

还有另一个选项layoutmanagers ,特别是SnapperLinearLayoutManager,它将此行为与其他方便的功能一起包装在布局管理器中。

有关更多信息和示例,请查看此处

于 2016-03-31T21:30:40.000 回答
0

所以我使用这段代码让它工作。它是一个自定义的 ScrollListener,可用于在滚动后将列表项捕捉到中心。以防万一将来有人遇到这个问题

于 2016-03-31T07:14:41.160 回答