时隔许久,我又要更博了,含蓄的话不多说了,今天我们的主题是这个RecyclerView。至于为什么要加个scrollBar?因为我的业务需求是需要一个实现成这样的,
效果图:(可能看起来比较粗糙,但功能实现了,你可以自定义修改嘛~哈哈哈)
可能我比较老派,我的app 中list的垂直布局还是喜欢用listView ,使用起来简单(可能博主我之前有个通用的adapter不舍得放弃吧,虽然RecyclerView也有通用的adapter,但总感觉显示简单的列表要多写几行代码,有点麻烦,哈哈哈,可能我就想偷懒吧)
但既然今天的是这个RecyclerView那么我们就开始详细的说明下吧~废话不多说切入正题。
注意:我这个View暂时只实现了垂直的View的ScrollBar的滚动,暂时没有横向实现,
未来可能我会拓展,敬请期待吧(大佬可能觉得太简单,勿喷,求教,谢谢)
先说下我的思路:
一、初始思路(想一个新玩意总得有个过程和弯路嘛),可能跟你想法一样哦
- 用一个LinearLayout 布局套住 RecyclerView 和一个自定义的View
- 自定义一个可以上下滚动的scrollBar
- 滚动的ScrollBar绑定RecyclerView的滚动事件
- Ok
二、现在的实现的思路 (我想了下如果用上面的方案实现的话就,必须写个xml文件,自定义一个ViewGroup,别人使用起来会很麻烦,当然你把他当成类库来用也很简单,而我就不想写xml)
- HobbyRecyclerView继承RecyclerView, 扩展这个功能
- 在HobbyRecyclerView 中先让子view的宽度缩小 ,留出给scrollBar的宽度
- 在HobbyRecyclerView中画一个ScrollBar ,这个bar的高度 = (view的可见高度 / view的所有子View的高度)* view可见高度 。
- 给HobbyRecyclerView加上滚动事件监听,监听滚动距离dy*(view的可见高度 / view的所有子View的高度)= scrollbar 的滚动距离
- 给scrollBar加上监听,监听拖动距离转化为 RecyclerView的滚动距离 = (scrollBar的拖动距离/scrollBar可滚动的区域高度(这里的区域高度等于View的高度)) * view的所有子View的高度
- 测试ok
思路也大概说了,那么就来看代码的实现吧。
/** * @author mdm * @Description HobbyRecyclerView * @Version 1.0 */ public class HobbyRecyclerView extends RecyclerView { private RectF mRangeRectf; private Paint mRangPaint; private int showMode = 1; //滚动条宽高 private float scrollBarHeight; private float scrollBarWidth; //柱间隙 private float scrollWidthSpace ; //滚动条宽度的等分比例 private