android 分割线 整洁,Android-RecyclerView分割线(水平/垂直/网格)
// 设置水平分割线
rv.setLayoutManager(new LinearLayoutManager(cxt));
rv.addItemDecoration(new GridItemDecoration(1, 0, cxt.getResources().getColor(R.color.gray_dim), true));
// 设置3列网格分割线
recyclerView.setLayoutManager(new GridLayoutManager(context, 3));
recyclerView.addItemDecoration(new GridItemDecoration(1, 1, mAct.getResources().getColor(R.color.gray_dim), true));
public class GridItemDecoration extends RecyclerView.ItemDecoration
{
private int mHorizonLineWidth;
private int mVerticalLineWidth;
private Drawable mDividerDrawable;
private boolean isDrawLastLine;
/**
* 构造分割线
*
* @param horizonLineWidth 水平分割线宽
* @param verticalLineWidth 垂直分割线宽
* @param dividerColor 分割线颜色
* @param isDrawLastLine 是否绘制最后一行分割线
*/
public GridItemDecoration(int horizonLineWidth, int verticalLineWidth, int dividerColor, boolean isDrawLastLine)
{
this.mHorizonLineWidth = horizonLineWidth;
this.mVerticalLineWidth = verticalLineWidth;
this.isDrawLastLine = isDrawLastLine;
this.mDividerDrawable = new ColorDrawable(dividerColor);
}
@Override
public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state)
{
// drawHorizontal
int childCount = parent.getChildCount();
for (int i = 0; i < childCount; i++)
{
View child = parent.getChildAt(i);
if (!isDrawLastLine && isLastRaw(parent, i, getSpanCount(parent), childCount))
continue;
RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int left = child.getLeft() - params.leftMargin;
final int right = child.getRight() + params.rightMargin;
final int top = child.getBottom() + params.bottomMargin;
final int bottom = top + mHorizonLineWidth;
mDividerDrawable.setBounds(left, top, right, bottom);
mDividerDrawable.draw(c);
}
// drawVertical
int childCount1 = parent.getChildCount();
for (int i = 0; i < childCount1; i++)
{
final View child = parent.getChildAt(i);
if ((parent.getChildViewHolder(child).getAdapterPosition() + 1) % getSpanCount(parent) == 0)
continue;
final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams();
final int top = child.getTop() - params.topMargin;
final int bottom = child.getBottom() + params.bottomMargin + mHorizonLineWidth;
final int left = child.getRight() + params.rightMargin;
int right = left + mVerticalLineWidth;
mDividerDrawable.setBounds(left, top, right, bottom);
mDividerDrawable.draw(c);
}
}
@Override
public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state)
{
int spanCount = getSpanCount(parent);
int childCount = parent.getAdapter().getItemCount();
int itemPosition = ((RecyclerView.LayoutParams) view.getLayoutParams()).getViewLayoutPosition();
if (itemPosition < 0)
return;
int column = itemPosition % spanCount;
int bottom;
int left = column * mVerticalLineWidth / spanCount;
int right = mVerticalLineWidth - (column + 1) * mVerticalLineWidth / spanCount;
if (isLastRaw(parent, itemPosition, spanCount, childCount))
bottom = isDrawLastLine ? mHorizonLineWidth : 0;
else
bottom = mHorizonLineWidth;
outRect.set(left, 0, right, bottom);
}
private int getSpanCount(RecyclerView parent)
{
int spanCount = -1;
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager)
spanCount = ((GridLayoutManager) layoutManager).getSpanCount();
else if (layoutManager instanceof StaggeredGridLayoutManager)
spanCount = ((StaggeredGridLayoutManager) layoutManager).getSpanCount();
return spanCount;
}
private boolean isLastRaw(RecyclerView parent, int pos, int spanCount, int childCount)
{
RecyclerView.LayoutManager layoutManager = parent.getLayoutManager();
if (layoutManager instanceof GridLayoutManager)
{
int remainCount = childCount % spanCount;
if (remainCount == 0)
return pos >= childCount - spanCount;
else
return pos >= childCount - childCount % spanCount;
}
else if (layoutManager instanceof StaggeredGridLayoutManager)
{
int orientation = ((StaggeredGridLayoutManager) layoutManager).getOrientation();
if (orientation == StaggeredGridLayoutManager.VERTICAL)
{
// 水平滚动
int remainCount = childCount % spanCount;
if (remainCount == 0)
return pos >= childCount - spanCount;
else
return pos >= childCount - childCount % spanCount;
}
else // 垂直滚动
return (pos + 1) % spanCount == 0;
}
else if (layoutManager instanceof LinearLayoutManager)
{
return pos >= parent.getAdapter().getItemCount() - 1;
}
return false;
}
}
android 分割线 整洁,Android-RecyclerView分割线(水平/垂直/网格)相关推荐
- android view上下滚动条,Android自定义View六(ViewGroup水平垂直滚动实现类似支付宝年度账单的效果)...
先看两张效果图 1.垂直滑动 onegif.gif 2.水平滑动 twoGIF.gif 先看使用方法 1.AndroidStudio 引入 Project.gradle repositories { ...
- android 水平方向瀑布流,Android RecyclerView(瀑布流)水平/垂直方向分割线
Android RecyclerView(瀑布流)水平/垂直方向分割线 Android RecyclerView不像过去的ListView那样随意的设置水平方向的分割线,如果要实现Recycle ...
- Android 活用RecyclerView分割线
1.ItemDecoration简介 Recyclerview是我们日常开发中使用频率比较高的的控件,而其中的ItemDecoration作为布局装饰又能很方便的帮助我们定义分割线,列表排行效果以及设 ...
- android 分割线布局,Android RecyclerView网格布局(支持多种分割线)详解(2)
记录了下RecyclerView的使用方法,并且讲述了线性布局列表的使用方法,在此基础上加上了万能分割线,支持颜色分割线和图片分割线,同时支持对分割线设置线宽. 这篇是总结一下网格布局的使用,同样也支 ...
- Android零基础入门第65节:RecyclerView分割线开发技巧
2019独角兽企业重金招聘Python工程师标准>>> 在上一期通过简单学习,已经领略到了RecyclerView的灵活性,当然都是一些最基础的用法,那么本期一起来学习Recycle ...
- Android移动开发之【Android实战项目】Recyclerview添加花色分割线
最近在做项目的过程中发现干巴巴的Recyclerview真的不好看,这里讲一下怎么一句话加默认的分割线,并且改变分割线的样式. 文章目录 一.添加默认分割线 二.修改样式 三.设置方法 通过 setD ...
- android gridview行分割线,Android使用GridView实现表格分割线效果
使用gridview实现表格分割线效果,网格布局表格布局也是可以实现的. 效果如下: 1.主函数代码: package com.example.qd.douyinwu; import android. ...
- Android史上最强分割线全攻略
借鉴自 https://blog.csdn.net/megatronkings/article/details/52156312 说实话,分割线这个东西,真的太难太难了!!! 难在何处?难在用最对的方 ...
- Android布局之边框、分割线
Android布局之边框.分割线 先上图,实现如下图样式 布局文件使用Linerlayout垂直布局即可,这里省略,主要需要添加如下样式: <?xml version="1.0&quo ...
最新文章
- DELL optiplex 解决改回 AHCI蓝屏问题
- python基础知识梳理-Python基础知识梳理 - 第03部分
- ORC文件存储格式的深入探究
- SQL Server 2005将某些数据库行为设置为与指定的 SQL Server 版本兼容
- 基因编辑婴儿追踪:该被编辑的是我们的心
- Kickfire Enters into MySQL Enterprise Agreement with Sun
- OpenShift 4 Hands-on Lab (13) 使用持久化存储
- 21日请假一天陪妈妈去国博
- git中clone出来项目,导入到eclipse并运行web项目
- Template Method (模板方法模式)
- oracle 密码过期处理
- x射线直接投影成像的条件_无损检测之X射线检测实时成像技术分辨率
- Selenium批量下载抖音无水印高清视频
- 智能清洁新消费的2021:不止营销造势,还有实力突围
- tf.matrix_diag和tf.matrix_inverse的用法(tensorflow如何生成对角矩阵和求逆矩阵)
- python turtle怎么画海绵宝宝_画师绘制海绵宝宝性转拟人,派大星变小帅哥,又脑补一出甜蜜大戏...
- pytorch: 给tensor删除或者添加维度为1的维度(squeeze和unsqueeze)
- DockerScan:Docker安全分析测试工具
- oc怎么去除场景中的光斑?渲染有光斑光点
- 广西最大陨石被盗案告破 人赃俱获
热门文章
- cocos2dx:addAnimation如何创建精灵动画并在工程中调用展示
- 高级程序员和低级程序员
- 使用BRAKER2进行基因组注释
- import obspy报错‘numpy.int64‘ object has no attribute ‘split‘`
- 生日蛋糕烟花动画CSS3js特效
- 微信小程序设置页面标题
- 从网络工程师沦落到网管,是自己不争气,或许也有其他原因。 ...
- 三菱mode bus tcp通讯_长治三菱Q01CPU
- 有了这三款软件,你家的智能电视和电视盒子就够用了
- 英语六级仔细阅读中的陷阱