自定义的GridView添加分割线.
(1)继承父类是GridView.
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
public class MyGridView extends GridView{
private int rownum; public MyGridView(Context context) { super(context); // TODO Auto-generated constructor stub } public MyGridView(Context context, AttributeSet attrs) { super(context, attrs); // TODO Auto-generated constructor stub } public MyGridView(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); // TODO Auto-generated constructor stub } @Override protected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){ int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST); super.onMeasure(widthMeasureSpec, expandSpec); } @Override protected void onDraw(Canvas canvas){ super.onDraw(canvas); int colnum = getNumColumns(); int total = getChildCount(); if(total%colnum == 0){ rownum = total/colnum; }else { rownum = (total/colnum)+1; } Paint localPaint = new Paint(); localPaint.setStyle(Paint.Style.STROKE); localPaint.setColor(getContext().getResources().getColor(R.color.grid_line)); View view0 = getChildAt(0); View viewColLast = getChildAt(colnum - 1); View viewRowLast = getChildAt((rownum - 1)*colnum); 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); } } }--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
(2)如果父类是ViewGroup,里面的线要在dispatchDraw中画,最后复写父类的super.dispatchDraw(canvas);
------------------------------------------------------------------------------------------------------------------------------------------------------- private int rownum; @Override public void dispatchDraw(Canvas canvas){ int colnum = getNumColumns();--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------int total = getChildCount();if(total%colnum == 0){rownum = total/colnum;}else {rownum = (total/colnum)+1;}Paint localPaint = new Paint();localPaint.setStyle(Paint.Style.STROKE);localPaint.setColor(getContext().getResources().getColor(R.color.grid_line));DashboardTileView view0 = (DashboardTileView)getChildAt(0);DashboardTileView viewColLast = (DashboardTileView)getChildAt(colnum - 1);DashboardTileView viewRowLast = (DashboardTileView)getChildAt((rownum - 1)*colnum);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);}super.dispatchDraw(canvas);}