我正在使用无限卷轴进行recyclerview,并重复使用X项。 此外,我想使用 PagerSnapHelper()来捕捉像viewpager一样的滚动。
一旦我开始向左或向右滚动, PageSnapHelper()就会像工作中心对齐一样快速地进行工作 -
我想在初始加载时将recyclerview显示为第二张图像。请告诉我们接下来该怎么做才能实现。
这是代码snipet -
linearLayoutManager = new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false);
this.recyclerView.setLayoutManager(linearLayoutManager);
SnapHelper snapHelper = new PagerSnapHelper();
adapterCarousel = new AdapterCarousel(mContext, glideRequestManager);
adapterCarousel.setViewType(RECYCLER_VIEW_TYPE_NORMAL);
adapterCarousel.setCarousel(carousel);
this.recyclerView.setAdapter(adapterCarousel);
snapHelper.attachToRecyclerView(recyclerView);
linearLayoutManager.scrollToPosition(Integer.MAX_VALUE / 2);
答案 0 :(得分:2)
我使用LinearLayoutManager#scrollToPositionWithOffset(pos, offset)
解决了这个问题。我只是将滚动位置偏移了项目之间填充的一半。这对我有用,因为我的项目宽度与屏幕相同。在你的情况下,你需要做一些数学。
假设您的商品宽度为W
,您的RecyclerView宽度为rvW
,商品之间的填充为padding
,那么您想要抵消的金额由{{1}给出}或(rvW - W)/2 - padding/2
。
最终代码:
(rvW - W - padding)/2
代码的一些可选改进:
如果您确定RecyclerView始终符合屏幕的宽度,则可以使用// post to give the recyclerview time to layout so it's width isn't 0
mRecyclerView.post(new Runnable() {
void run() {
int padding = getResources().getDimensionPixelSize(R.dimen.some_padding);
int rvWidth = mRecyclerView.getWidth();
int itemWidth = getResources().getDimensionPixelSize(R.dimen.itemWidth);
int offset = (rvWidth - itemWidth - padding) / 2;
mLinearLayoutManager.scrollToPositionWithOffset(pos, offset);
}
});
和View#measure()
,甚至是显示器的宽度,而不是发布到RecyclerView。
如果您的RecyclerView的子项大小可变,您可以通过View#getMeasuredWidth()
获取视图并以此方式获取宽度。
答案 1 :(得分:0)
对我来说使用recyclerView.smoothScrollToPosition(x);
代替linearLayoutManager.scrollToPosition(x);
做了诀窍
答案 2 :(得分:0)
linearLayoutManager.scrollToPosition((Integer.MAX_VALUE / 2)-1);
linearLayoutManager.smoothScrollToPosition(Integer.MAX_VALUE / 2);
如果有更好的方法,请告诉我