RecyclerView的分隔线需要自定义设置

DividerItemDecoration 是一个官方的例子中的

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.HORIZONTAL_LIST));

mRecyclerView.addItemDecoration(new DividerItemDecoration(this, DividerItemDecoration.VERTICAL_LIST));


import android.content.Context;import android.content.res.TypedArray;import android.graphics.Canvas;import android.graphics.Rect;import android.graphics.drawable.Drawable;import android.support.v7.widget.LinearLayoutManager;import android.support.v7.widget.RecyclerView;import android.view.View;/*这个是v7 中的一个sample中的 */public class DividerItemDecoration 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 DividerItemDecoration(Context context, int orientation) {        final TypedArray a = context.obtainStyledAttributes(ATTRS);        mDivider = a.getDrawable(0);//系统属性中获取        a.recycle();        setOrientation(orientation);    }    public void setOrientation(int orientation) {        if (orientation != HORIZONTAL_LIST && orientation != VERTICAL_LIST) {            throw new IllegalArgumentException("invalid orientation");        }        mOrientation = orientation;    }    @Override //在RecyclerView的onDraw中执行    public void onDraw(Canvas c, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            drawVertical(c, parent);        } else {            drawHorizontal(c, parent);        }    }    /**     * 绘制纵向列表时的分隔线  这时分隔线是横着的     * 每次 left相同,top根据child变化,right相同,bottom也变化     * @param c     * @param parent     */    public 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;            final int bottom = top + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    /**     * 绘制横向列表时的分隔线  这时分隔线是竖着的     * l、r 变化; t、b 不变     * @param c     * @param parent     */    public 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;            final int right = left + mDivider.getIntrinsicHeight();            mDivider.setBounds(left, top, right, bottom);            mDivider.draw(c);        }    }    @Override  //预留item间隙    public void getItemOffsets(Rect outRect, int itemPosition, RecyclerView parent) {        if (mOrientation == VERTICAL_LIST) {            outRect.set(0, 0, 0, mDivider.getIntrinsicHeight());        } else {            outRect.set(0, 0, mDivider.getIntrinsicWidth(), 0);        }    }}


更多相关文章

  1. Android SDKVersion 参数列表
  2. 2.5.2 使用alertdialog 创建列表对话框
  3. 布局技巧和列表控件
  4. 2.4.10 可展开的列表组件
  5. Android ListView列表 刷新和加载更多
  6. 2.4.9 列表视图
  7. Android 仿QQ多级列表框实现
  8. Android studio学习之TextView、EditText、Button、ImageView、S
  9. Android SDK大连东软镜像地址及地址列表

随机推荐

  1. Android核心分析之四 ---手机的软件形态
  2. 2020上半年百度Android岗(初级到高级)面试
  3. android中导入数据
  4. Android —— SQLite数据库简易使用
  5. 【Android】进程间通信IPC——AIDL
  6. 谷歌二季度发布Android5.0:捆绑Chrome系统
  7. 个人开发者如何通过Android应用赚外快
  8. Android 组件硬知识点
  9. Android屏幕计量单位详解
  10. Android使用Thread的interrupt与sleep,重