天天看點

在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"/>