package com.bigfat.androidltest; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.drawable.Drawable; import android.support.v7.widget.RecyclerView; import android.view.View; /** * @author <a href="mailto:fbzhh007@gmail.com">bigfat</a> * @since 2015/1/21 */ public class SampleDivider extends RecyclerView.ItemDecoration { //默认分隔条Drawable样式的ID private static final int[] ATTRS = {android.R.attr.listDivider}; //分隔条Drawable对象 private Drawable mDivider; public SampleDivider(Context context) { TypedArray a = context.obtainStyledAttributes(ATTRS); //获取系统分隔条Drawable对象 mDivider = a.getDrawable(0); a.recycle(); } //绘制所有列表项的分隔条 @Override public void onDrawOver(Canvas c, RecyclerView parent, RecyclerView.State state) { super.onDrawOver(c, parent, state); //左边缘坐标 int left = parent.getPaddingLeft(); //右边缘坐标 int right = parent.getWidth() - parent.getPaddingRight(); //获取列表项总数 int childCount = parent.getChildCount(); //绘制所有列表项的分割线 for (int i = 0; i < childCount; i++) { //获得当前的列表项 View child = parent.getChildAt(i); //获取当前列表项的布局参数信息 RecyclerView.LayoutParams params = (RecyclerView.LayoutParams) child.getLayoutParams(); //计算分隔条左上角的纵坐标 int top = child.getBottom() + params.bottomMargin; //计算分隔条右下角的纵坐标 int bottom = top + mDivider.getIntrinsicHeight(); //设置分隔条绘制的位置 mDivider.setBounds(left, top, right, bottom); //将分隔条绘制在Canvas上 mDivider.draw(c); } } }