android - 加载时将 Recyclerview 项目对齐到中心

标签 android android-recyclerview horizontal-scrolling linearlayoutmanager

我正在使用无限滚动的 recyclerview 来重复 X 个项目。 我还想使用 PagerSnapHelper() 来像 viewpager 一样捕捉滚动。

因此,最初加载列表时,显示内容如下 - enter image description here

一旦我开始向左或向右滚动,PageSnapHelper()就会开始工作,就像viewpager一样,中心对齐如下 - enter image description here

我想在最初加载时将 recyclerview 显示为第二张图像。请告诉下一步要做什么来实现这一目标。

这是代码 fragment -

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);

最佳答案

我通过使用LinearLayoutManager#scrollToPositionWithOffset(pos, offset)解决了这个问题。我只是将滚动位置偏移了项目之间填充的一半。这对我有用,因为我的元素与屏幕宽度相同。在你的情况下,你需要做一些数学计算。

假设您的项目的宽度为 W,您的 RecyclerView 的宽度为 rvW,项目之间的填充为 padding 那么您想要的数量偏移量由 (rvW - W)/2 - padding/2(rvW - W - padding)/2 给出。

最终代码:

// 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()View#getMeasuredWidth() 甚至显示器的宽度(如果您确定),而不是发布到 RecyclerView RecyclerView 将始终适合屏幕宽度。

  • 如果您的 RecyclerView 的子级大小可变,您可以通过 mLinearLayoutManager.findViewByPosition(mLinearLayoutManager.findFirstVisibleItemPosition()) 获取 View,并以这种方式获取其宽度。

关于android - 加载时将 Recyclerview 项目对齐到中心,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43091750/

相关文章:

android - 如何创建 ".psh"文件?

android格式edittext每4个字符后显示空格

android - 使用回收器 View 的 Google Play 商店界面

android - 改变应用程序背景时在android中添加 "Rubber Band"效果

android - 重绘 ListView 中的单行

android - 微调器 setAdapter 菜单 NullPointerException

out-of-memory - 使用 RecyclerView 时出现 android OutOfMemoryError

android - 如何阻止 RecyclerView 在主行下方显示空行?

Android - 垂直 ScrollView 中的水平 ScrollView

android - 关于水平回收器 View 中的适当滚动