在RecyclerView中垂直居中选定的项目

时间:2016-08-27 20:05:48

标签: android android-recyclerview

我正在尝试为我的应用实现某种轮选择器,因为当前选项依赖于自定义Views或旧ListView,所以我想将我的解决方案基于{ {1}}。

我到目前为止所做的是在RecyclerView两个RecyclerView的开头和结尾设置一个名为View的不同类型,以便第一个和最后一个项目在PADDING_TYPE中垂直居中。

RecyclerView

现在我正在尝试了解如何使所选项目保持垂直居中。

到目前为止我尝试了什么:

1- LinearSnapHelper

recyclerView.post(new Runnable() {
    @Override
    public void run() {
        //80dp is the height of a regular list item
        int paddingHeight = ((recyclerView.getHeight()-SettingsManager.dptopixels(80))/2);
        binding.getRoot().getLayoutParams().height = paddingHeight;
    }
});

不能按预期工作,我也试图覆盖几种方法(可能是以错误的方式),但我不能让它自动垂直居中选择。并且它不够活泼,所选项目“移动”而不是锁定到垂直中心。

2-自定义LinearSnapHelper helper = new LinearSnapHelper(); helper.attachToRecyclerView(mRecyclerView);

我尝试通过更改RecyclerView.OnScrollListener此行

来调整用于水平滚动的here建议代码
RecyclerView.OnScrollListener

垂直滚动差异:

allPixelsDate += dx;

此实现即将起作用,因为它选择最接近列表垂直中心的项目,但不将其锁定到中心。

有可能实现这样的结果吗?怎么样?

更清楚:我希望在1:10显示here显示的结果。选择被“锁定”在中心。

1 个答案:

答案 0 :(得分:10)

您只需在RecyclerView上使用LinearSnapHelper和setOnFlingListener(snapHelper)方法。

这是一个有效的例子:

LinearSnapHelper snapHelper = new LinearSnapHelper();
snapHelper.attachToRecyclerView(recyclerView);
recyclerView.setLayoutManager(new LinearLayoutManager(getContext()));
recyclerView.setOnFlingListener(snapHelper);

要获得真正的车轮选择器,您还需要为车轮添加一些外观并准确计算RecyclerView的行高和高度。例如,如果要在车轮中仅显示3行,则需要将RecyclerView高度设置为行高的3倍。