RecyclerView+SnapHelper实现无限循环筛选控件
RecyclerView+SnapHelper实现无限循环筛选控件 RecyclerView是一个强大的列表控件,SnapHelper是一个辅助RecyclerView实现滑动对齐的工具类。在 Android 开发中,我们经常需要实现无限循环筛选控件,例如选择日期、选择城市等。今天我们将介绍如何使用RecyclerView+SnapHelper实现无限循环筛选控件。 让我们来了解一下需求: 1. 选项由后台配置,也就是控件要动态设置宽度; 2. 每次滑动都要左对齐,并默认选中最左边选项; 3. 控件可以无限循环。 下面我们将逐步介绍如何实现这些需求。 动态设置控件宽度 为了实现动态设置控件宽度,我们需要获取adapter的item宽度和adapter里装载的itemCount。我们可以在adapter中实现getItemWidth()方法,返回item的宽度,然后在控件中设置宽度。 每次滑动都要左对齐 为了实现每次滑动都要左对齐,我们可以使用LinearSnapHelper中的calculateDistanceToFinalSnap方法。这个方法可以计算滑动距离,以便实现左对齐。 默认选中最左item 为了实现默认选中最左item,我们可以使用RecycleView的LayoutManager中的findFirstVisibleItemPosition()方法,查找显示第一项的position,然后高亮显示最左边的item。 控件无限循环 为了实现控件无限循环,我们可以将父类adapter的itemCount设置为Integer.MAX_VALUE,这样控件就可以无限循环了。 核心代码 下面是核心代码: ```java private void initData(){ if (filterItemEntity != null) { if (!TextUtils.isEmpty(filterItemEntity.getTitle())) { filtrationType.setText(filterItemEntity.getTitle()); } if (filterItemEntity.getOptions() != null) { mAdapter = new ADA_FilterWheel(mContext, filterItemEntity.getOptions()); } mLoopRecyclerView.setAdapter(mAdapter); if (adaItemCallback!=null){ adaItemCallback.sendItems(mAdapter.getItemRawCount()); } //设置滚动监听 mLoopRecyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() { @Override public void onScrollStateChanged(RecyclerView recyclerView, int newState) { super.onScrollStateChanged(recyclerView, newState); //滚动停止时,获取recycler显示的第一项的position if (newState == RecyclerView.SCROLL_STATE_IDLE) { int items = mAdapter.getItemRawCount(); int firstItemPosition =linearManager.findFirstVisibleItemPosition(); //高亮显示最左边的item mAdapter.highlightItem(firstItemPosition % items); } //滚动过程中,释放选中状态 if (newState == RecyclerView.SCROLL_STATE_DRAGGING) { mAdapter.reset(); } } @Override public void onScrolled(RecyclerView recyclerView, int dx, int dy) { super.onScrolled(recyclerView, dx, dy); } }); //找到当前选中的实体 for (int i = 0; i < filterItemEntity.getOptions().size(); i++) { FilterOptionsEntity bean = filterItemEntity.getOptions().get(i); ... } } } ``` 总结 使用RecyclerView+SnapHelper实现无限循环筛选控件可以满足我们对控件的需求。通过动态设置控件宽度、每次滑动都要左对齐、默认选中最左item和控件无限循环,我们可以实现一个强大且实用的控件。
- 粉丝: 3
- 资源: 911
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Scaled-YOLOv4训练自己的数据集详细教程PDF,关于论文阅读请联系小编获取PDF文档.zip
- Scaled-YOLOv4 的 Tensorflow2.x 实现,如 Scaled-YOLOv4扩展跨阶段部分网络中所述.zip
- python动态化爱心图源代码
- RK3588 版 YOLOv5.zip
- RK3566,68,88 的 YoloV5 NPU.zip
- 计算机行业教育新基建跟踪-华西证券-12页.pdf
- 路面水坑,路面坑洼检测,有YOLOV7标记 5000+标记图片
- QT+NCNN 小米手机运行 YOLOv8s.zip
- adafasfww dddsa
- Pytorch 轻松重新实现“YOLOX2021 年超越 YOLO 系列”.zip