我正在尝试为我的应用实现某种轮选择器,因为当前选项依赖于自定义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
此行
RecyclerView.OnScrollListener
垂直滚动差异:
allPixelsDate += dx;
此实现即将起作用,因为它选择最接近列表垂直中心的项目,但不将其锁定到中心。
有可能实现这样的结果吗?怎么样?
更清楚:我希望在1:10显示here显示的结果。选择被“锁定”在中心。
答案 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倍。