本文實作的效果如何所示,在網格布局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"/>