Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果

  

本文中所有效果通过ItemDecoration实现,通过此实现的可以与业务解耦,让RecyclerView的模板更加简洁,不关心任何辅助性ui, github地址

  

一、顶部吸附效果图

  

 Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果

  

二、顶部不吸附效果图

  

 Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果

  

三,不满一屏效果

  

 Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果

  

四、核心实现点

  

1,为什么通过ItemDecoration能够实现,原理?

  

①通过getItemOffsets()方法获取当前模板视图的左,上,右,底部边距,这些留出的间距用于绘制这些辅助性ui。

     //RecyclerView的衡量孩子的方法   公共空间measureChild (@NonNull视图的孩子,int widthUsed, int heightUsed) {   最后LayoutParams lp=(LayoutParams) child.getLayoutParams ();//将getItemOffsets()获取的值累加到测量值之中   最后一个矩形insets=mRecyclerView.getItemDecorInsetsForChild(孩子);   widthUsed +=insets。左+ insets.right;   heightUsed +=insets。前+ insets.bottom;   最后一个int widthSpec=getChildMeasureSpec (getWidth (), getWidthMode (),   getPaddingLeft getPaddingRight () + () + widthUsed lp.width,   canScrollHorizontally ());   最后一个int heightSpec=getChildMeasureSpec(获得(),getHeightMode (),   getPaddingTop getPaddingBottom () + () + heightUsed lp.height,   canScrollVertically ());   如果(shouldMeasureChild(孩子,widthSpec heightSpec, lp)) {   的孩子。测量(widthSpec heightSpec);   }   }      

②通过onDrawOver()绘制悬浮视图,绘制的ui在所有子视图之上。

        @Override   公共空间画(帆布c) {   super.draw (c);//在RecyclerView绘制完之后回调onDrawOver()方法   最后一个int数=mItemDecorations.size ();   for (int i=0;我& lt;计数;我+ +){   mItemDecorations.get(我)。onDrawOver (c, mState);   }   }      

③通过onDraw()方法绘制分割线等视图。

        公共空间>   私人空间setDecorInsetsBottom (RecyclerView。LayoutParams param, int底部){   尝试{//找到RecyclerView.LayoutParams中的mDecorInsets属性值   现场提交=RecyclerView.LayoutParams.class.getDeclaredField (“mDecorInsets”);   filed.setAccessible(真正的);   矩形decorRect=(矩形)filed.get(参数);   decorRect。底=底部;   }捕捉(异常e) {   }   }      

  

以上所述是小编给大家介绍的Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
  如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Android RecyclerView实现悬浮吸顶,分隔线,到底提示效果