recyclerview添加分割线
来源:互联网 发布:模特数据分析招聘 编辑:程序博客网 时间:2024/06/05 03:54
public class MyDividerItemDecoration extends RecyclerView.ItemDecoration { private static final int[] ATTRS = new int[]{ android.R.attr.listDivider }; public static final int HORIZONTAL_LIST = LinearLayoutManager.HORIZONTAL; public static final int VERTICAL_LIST = LinearLayoutManager.VERTICAL; /** * 用于绘制间隔样式 */ private Drawable mDivider; /** * 列表的方向,水平/竖直 */ private int mOrientation; public MyDividerItemDecoration(Context context, int orientation) { // 获取默认主题的属性 final TypedArray a = context.obtainStyledAttributes(ATTRS); mDivider = a.getDrawable(0); a.recycle(); setOrientation(orientation); } @Override public void onDraw(Canvas c, RecyclerView parent, RecyclerView.State state) { // 绘制间隔 if (mOrientation == VERTICAL_LIST) { drawVertical(c, parent); } else { drawHorizontal(c, parent); } } @Override public void getItemOffsets(Rect outRect, View view, RecyclerView parent, RecyclerView.State state) { if (mOrientation == VERTICAL_LIST) { outRect.set(0, 0, 0, mDivider.getIntrinsicHeight()); } else { outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0); } } private void setOrientation(int orientation) { if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) { throw new IllegalArgumentException("invalid orientation"); } mOrientation = orientation; } /** * 绘制间隔 */ private void drawVertical(Canvas c, RecyclerView parent) { final int left = parent.getPaddingLeft(); final int right = parent.getWidth() - parent.getPaddingRight(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int top = child.getBottom() + params.bottomMargin + Math.round(ViewCompat.getTranslationY(child)); final int bottom = top + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } } /** * 绘制间隔 */ private void drawHorizontal(Canvas c, RecyclerView parent) { final int top = parent.getPaddingTop(); final int bottom = parent.getHeight() - parent.getPaddingBottom(); final int childCount = parent.getChildCount(); for (int i = 0; i < childCount; i++) { final View child = parent.getChildAt(i); final RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child .getLayoutParams(); final int left = child.getRight() + params.rightMargin + Math.round(ViewCompat.getTranslationX(child)); final int right = left + mDivider.getIntrinsicHeight(); mDivider.setBounds(left, top, right, bottom); mDivider.draw(c); } }}
然后在代码中设置RecyclerView的间隔样式。
mRecyclerView.addItemDecoration(new MyDividerItemDecoration(this, LinearLayoutManager.VERTICAL));
阅读全文
0 0
- RecyclerView添加分割线
- recyclerview添加分割线
- RecyclerView添加分割线
- RecyclervIew添加分割线
- RecyclerView如何添加分割线
- Android RecyclerView添加分割线
- RecyclerView添加表格分割线
- RecyclerView 的添加分割线
- recyclerView添加自定义分割线
- 为RecyclerView添加分割线
- RecyclerView添加虚线分割线
- Android RecyclerView之添加Item分割线
- RecyclerView调用addItemDecoration添加自定义分割线
- recyclerView在条目间添加分割线。
- RecyclerView调用addItemDecoration添加自定义分割线
- 为RecyclerView添加精美的分割线
- RecyclerView添加分割线的简便方法
- 给RecyclerView添加分割线的步骤
- 【转载】给菜鸟看的Android应用开发全流程
- Xenserver之HA实现
- leetcode Add to List 5. Longest Palindromic Substring
- linux 用户空间与内核空间——高端内存详解
- NOIP初赛知识
- recyclerview添加分割线
- go语言 运行go文件时,报错Resource doesn't have a corresponding Go package的处理方法
- 【云栖大会】阿里云李津:持续释放技术红利,为1000万企业提供技术平台
- wince下隐藏任务栏C#源码
- php+js+yii2 实现钉钉企业应用免登
- Quartz.NET实现作业调度
- 【云栖大会】阿里云发布新物种神龙云服务器媲美物理机性能的弹性云服务器
- 持续集成(CI)
- 利用 python pprint模块 优雅的输出