天天看点

在gridview实现横竖分割线

在gridview实现横竖分割线

本文实现的效果如何所示,在网格布局gridview实现横竖的分割线。

1.首先自定义一个类,继承GridView

public class LineGridView extends GridView       
//实现构造方法      
public LineGridView(Context context) {
    super(context);
    // TODO Auto-generated constructor stub
}

public LineGridView(Context context, AttributeSet attrs) {
    super(context, attrs);
}

public LineGridView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
}      
//定义行数      
private int rownum;      

2.覆写onDraw()方法

@Override
protected void onDraw(Canvas canvas) {
    super.onDraw(canvas);
    int colnum = getNumColumns(); //获取列数
    int total = getChildCount();  //获取Item总数

      
//计算行数
    if (total % colnum == 0) {
        rownum = total / colnum;
    } else {
        rownum = (total / colnum) + 1; //当余数不为0时,要把结果加上1
    }
    Paint localPaint; //设置画笔
    localPaint = new Paint();
    localPaint.setStyle(Paint.Style.STROKE); //画笔实心
    localPaint.setColor(getContext().getResources().getColor(R.color.grid_line));//画笔颜色

    View view0 = getChildAt(0); //第一个view
    View viewColLast = getChildAt(colnum - 1);//第一行最后一个view
    View viewRowLast = getChildAt((rownum - 1) * colnum); //第一列最后一个view


    for (int i = 1, c = 1; i < rownum || c < colnum; i++, c++) {
        //画横线 
        canvas.drawLine(view0.getLeft(), view0.getBottom() * i, viewColLast.getRight(), viewColLast.getBottom() * i, localPaint);
        //画竖线
        canvas.drawLine(view0.getRight() * c, view0.getTop(), viewRowLast.getRight() * c, viewRowLast.getBottom(), localPaint);
    }
}      

3.使用

和基本GreidView一样,记得使用全名

<com.ui.customview.LineGridView
    android:id="@+id/account_gridview"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:horizontalSpacing="0dp"
    android:numColumns="3"
    android:verticalSpacing="0dp"
    android:layout_marginLeft="20dp"
    android:layout_marginRight="20dp"
    android:layout_marginTop="40dp"
    android:layout_centerHorizontal="true"/>