我有一个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?谢谢:))
答案 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);
}
}
这是旧的,但我希望它对某人有帮助。