滚动时移动RecyclerView

时间:2015-06-08 17:14:16

标签: java android android-recyclerview

我有一个RecyclerView,我想垂直移动,具体取决于用户在其中滚动的数量。我创建了自定义的RecyclerView.OnScrollListener来跟踪滚动的距离:

@Override
public void onScrolled(RecyclerView rView, int dx, int dy) {
  setY(dy)
}

方法setY改变RecyclerView的坐标,如下所示:

recyclerView.setY(recyclerView.getY + dy)

这种方法的问题在于RecyclerView在改变它的位置时“振动”。这意味着View在移动时会发抖。我认为在移动RecyclerView的位置时dy出错了。如何摆脱振动并顺利移动RecyclerView?谢谢:))

1 个答案:

答案 0 :(得分:1)

我发现通过使用填充可以在没有“振动”的情况下修改回收器视图位置。

我已经编写了一个自定义LayoutManager,在本例中是GridLayoutManager,但可以通过覆盖scrollVerticallyBy来为垂直位置执行此操作:

将自定义布局管理器分配给您的recyclerview:

CustomGridLayoutManager gridLayoutManager = new CustomGridLayoutManager(getContext(), 2);
    recyclerView.setLayoutManager(gridLayoutManager);

创建自定义布局管理器:

private class CustomGridLayoutManager extends GridLayoutManager{   
    CustomGridLayoutManager(Context context, int spanCount) {
        super(context, spanCount);
    }

    @Override
    public int scrollVerticallyBy(int dy, RecyclerView.Recycler recycler, RecyclerView.State state) {
        recyclerView.setPadding(recyclerView.getPaddingLeft(),
                recyclerView.getPaddingTop() - dy,
                recyclerView.getPaddingRight(),
                recyclerView.getPaddingBottom());

        return super.scrollVerticallyBy(dy,recycler,state);
    }

}

这是旧的,但我希望它对某人有帮助。