【发布时间】:2015-02-14 22:42:34
【问题描述】:
我将Scrollview 用于无限的“时间选择器轮播”,发现这不是最好的方法 (last question)
现在,我找到了Recycler View,但我无法获取recyclerView X 方向的当前滚动偏移量? (假设每个item是100px宽,第二个item只有50%可见,所以scroll-offset是150px)
- 所有项目的宽度相同,但在第一个项目之前,最后一个项目之后有一些差距
-
recyclerView.getScrollX()返回0(文档说:初始滚动值) -
LayoutManager有findFirstVisibleItemPosition,但我无法用它计算 X 偏移量
更新
我刚刚找到了一种方法来继续跟踪 X 位置,同时使用 onScrolled 回调更新值,但我更喜欢获取实际值而不是一直跟踪它!
private int overallXScroll = 0;
//...
mRecyclerView.setOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrolled(RecyclerView recyclerView, int dx, int dy) {
super.onScrolled(recyclerView, dx, dy);
overallXScroll = overallXScroll + dx;
Log.i("check","overallXScroll->" + overallXScroll);
}
});
【问题讨论】:
-
你的意思不是“x”而是项目位置?
-
我刚刚澄清了(?)我的问题。我正在寻找所有项目在 X 方向上的当前偏移量。
-
RecyclerView 不支持 getScrollX/Y 因为它不能保证正确的结果。例如,用户可以调用 scrollToPosition(100)。要计算真正的 scrollY,它必须将所有项目布局在 0 到 100 之间。不可行。只要您的适配器内容不变,
setOnScrollListener就可以工作。或者,您可以使用LLM#findLastVisibleItemPosition并使用 view.getLeft() 自己计算总偏移量 -
通过在监听器中添加滚动距离来保存总滚动是迄今为止我发现的最简单和有效的解决方案。但我知道,RecyclerView 在被系统杀死后恢复活动时会保存它的滚动位置。我的意思是,我们的自定义变量在从后台恢复后可能会不同步。
标签: android scroll position android-recyclerview