RecyclerView之ItemDecoration在屏幕中增加下划线的一个小demo
来源:互联网 发布:淘宝大促时间表2016 编辑:程序博客网 时间:2024/05/16 17:29
首先,在activity中:
localVideoRecycView.addItemDecoration(new GridItemDecorator(this));localVideoRecycView.setLayoutManager(new GridLayoutManager(this, 3));调用ItemDecoration方法
class GridItemDecorator extends RecyclerView.ItemDecoration { private final Drawable mDivider; public GridItemDecorator(Context context) { mDivider = context.getResources().getDrawable(R.drawable.dividing_line); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDraw(c, parent, state); drawVertical(c, parent); drawHorizontal(c, parent); } // 绘制垂直方向分割线 private void drawVertical(Canvas c, RecyclerView parent) { int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getRight() + params.rightMargin; int top = child.getTop() - params.topMargin; int right = left + mDivider.getIntrinsicWidth(); int bottom = child.getBottom() + params.bottomMargin; mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } // 绘制水平方向分割线 private void drawHorizontal(Canvas c, RecyclerView parent) { int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { View child = parent.getChildAt(i); RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); int left = child.getLeft() - params.leftMargin; int top = child.getBottom() + params.bottomMargin; int right = child.getRight() + params.rightMargin; int bottom = top + mDivider.getMinimumHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } @Override public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) { super.getItemOffsets(outRect, itemPosition, parent); int right = mDivider.getIntrinsicWidth(); int bottom = mDivider.getIntrinsicHeight(); if (isLastSpan(itemPosition, parent)) { right = 0; } if (isLastRow(itemPosition, parent)) { bottom = 0; } outRect.set(0, 0, right, bottom); } // 判断是否是最后一行 public boolean isLastRow(int itemPosition, RecyclerView parent) { RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { int spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); int itemCount = parent.getAdapter().getItemCount(); if ((itemCount - itemPosition - 1) < spanCount) { return true; } } return false; } // 判断是否是最后一列 public boolean isLastSpan(int itemPosition, RecyclerView parent) { RecyclerView.LayoutManager layoutManager = parent.getLayoutManager(); if (layoutManager instanceof GridLayoutManager) { int spanCount = ((GridLayoutManager) layoutManager).getSpanCount(); if ((itemPosition + 1) % spanCount == 0) { return true; } } return false; }}
然后重写GridItemDecorator方法,在这里,我重写的GridItemDecorator实现的是将屏幕划分为三等份,靠近屏幕端的上下左右没有分割线
如图
阅读全文
1 0
- RecyclerView之ItemDecoration在屏幕中增加下划线的一个小demo
- RecyclerView之ItemDecoration详解
- RecyclerView之ItemDecoration详解
- RecyclerView之ItemDecoration
- RecyclerView之ItemDecoration由浅入深
- RecyclerView之ItemDecoration详解
- RecyclerView之ItemDecoration由浅入深
- RecyclerView之ItemDecoration
- 一个RecyclerView写出来的小Demo
- RecyclerView中itemDecoration
- 小甜点,RecyclerView 之 ItemDecoration 讲解及高级特性实践
- 小甜点,RecyclerView 之 ItemDecoration 讲解及高级特性实践
- RecyclerView.ItemDecoration的使用
- 关于RecyclerView的ItemDecoration
- RecyclerView之ItemDecoration详解(下)
- RecyclerView之ItemDecoration详解(上)
- RecyclerView之ItemDecoration由浅入深(转载)
- RecyclerView的分割线 - ItemDecoration
- 工厂模式,抽象工厂模式
- 发表论文时如何避免选取到假的杂志社
- 后台验证码实现,附代码详解
- 最新版Kali Linux上搭建DVWA
- 关于类型转换(1)
- RecyclerView之ItemDecoration在屏幕中增加下划线的一个小demo
- 求最大子数组(利用动态规划)
- 理解 bashrc 和 profile
- spring配置文件ApplicationContext.xml里面class等没有提示功能
- 如何成长为一名机器学习工程师
- Oracle—rownum用法详解(转)
- Jupyter notebook中Python2和Python3共存
- Angular 指令(Directive)属性型指令
- 每天一个linux命令(26):用SecureCRT来上传和下载文件