我有一个 RecyclerView,我想根据用户在其中滚动的程度垂直移动它。我创建了自定义 RecyclerView.OnScrollListener 来跟踪滚动的距离:
@Override
public void onScrolled(RecyclerView rView, int dx, int dy) {
setY(dy)
}
方法 setY 改变 RecyclerView 的坐标,如下所示:
recyclerView.setY(recyclerView.getY + dy)
这种方法的问题是 RecyclerView 在改变位置时会“振动”。这意味着 View 在移动时会晃动。我认为 dy 在移动 RecyclerView 的位置时出错了。如何摆脱振动并顺利移动RecyclerView?谢谢:)
最佳答案
我发现可以通过使用填充来修改回收器 View 位置而不需要“振动”。
我编写了一个自定义布局管理器,在本例中为 GridLayoutManager,但可以是通过覆盖 scrollVerticallyBy
来实现垂直位置的任何类型:
将自定义布局管理器分配给您的回收 View :
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);
}
}
这是旧的,但我希望它对某人有帮助。
关于java - 滚动时移动 RecyclerView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30715266/