给自定义的网格画上分割线

自定义的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);} --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



猜你喜欢

转载自blog.csdn.net/qq_35611559/article/details/76689005
今日推荐