Android RecyclerView实现悬浮吸顶、分隔线、到底提示效果
本文中所有效果通过ItemDecoration实现,通过此实现的可以与业务解耦,让RecyclerView的模板更加简洁,不关心任何辅助性ui,github地址
一、顶部吸附效果图
二、顶部不吸附效果图
三、不满一屏效果
四、核心实现点
1、为什么通过ItemDecoration能够实现,原理?
①通过getItemOffsets()方法获取当前模板view的left、top、right、bottom边距,这些留出的间距用于绘制这些辅助性ui。
//RecyclerView的measurechild方法
publicvoidmeasureChild(@NonNullViewchild,intwidthUsed,intheightUsed){
finalLayoutParamslp=(LayoutParams)child.getLayoutParams();
//将getItemOffsets()获取的值累加到测量值之中
finalRectinsets=mRecyclerView.getItemDecorInsetsForChild(child);
widthUsed+=insets.left+insets.right;
heightUsed+=insets.top+insets.bottom;
finalintwidthSpec=getChildMeasureSpec(getWidth(),getWidthMode(),
getPaddingLeft()+getPaddingRight()+widthUsed,lp.width,
canScrollHorizontally());
finalintheightSpec=getChildMeasureSpec(getHeight(),getHeightMode(),
getPaddingTop()+getPaddingBottom()+heightUsed,lp.height,
canScrollVertically());
if(shouldMeasureChild(child,widthSpec,heightSpec,lp)){
child.measure(widthSpec,heightSpec);
}
}
②通过onDrawOver()绘制悬浮视图,绘制的ui在所有子视图之上。
@Override
publicvoiddraw(Canvasc){
super.draw(c);
//在RecyclerView绘制完之后回调onDrawOver()方法
finalintcount=mItemDecorations.size();
for(inti=0;i
③通过onDraw()方法绘制分割线等视图。
publicvoidonDraw(Canvasc){
super.onDraw(c);
//先回调onDraw()方法,在绘制RecyclerView子view
finalintcount=mItemDecorations.size();
for(inti=0;i
2、“到底提示”的绘制
由于在getItemOffsets()获取不到子视图的宽高,此时还没有measure,在getItemOffsets()添加高度后,如果不满一屏需要在onDraw()方法中进行修正,修正方式为:
反射修改mDecorInsets属性,重置在getItemOffsets()方法中设置的值。
privatevoidsetDecorInsetsBottom(RecyclerView.LayoutParamsparam,intbottom){
try{
//找到RecyclerView.LayoutParams中的mDecorInsets属性值
Fieldfiled=RecyclerView.LayoutParams.class.getDeclaredField("mDecorInsets");
filed.setAccessible(true);
RectdecorRect=(Rect)filed.get(param);
decorRect.bottom=bottom;
}catch(Exceptione){
}
}
总结
以上所述是小编给大家介绍的AndroidRecyclerView实现悬浮吸顶、分隔线、到底提示效果,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
热门推荐
3 祝福语简短的微信
10 幼儿祝福语大全简短贺卡
11 感谢教官文案祝福语简短
12 鼠年同事祝福语简短创意
13 元旦祝福语 简短独特群发
14 妈咪跟我生日祝福语简短
15 给儿子新婚祝福语简短
16 伴娘祝福语长文案简短
17 恭喜高考完祝福语简短
18 生日祝福语送老公简短