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

来源:互联网 发布:淘宝旗袍品牌排行榜 编辑:程序博客网 时间:2024/05/19 10:35

自定义的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}@Overrideprotected void onMeasure(int widthMeasureSpec,int heightMeasureSpec){int expandSpec = MeasureSpec.makeMeasureSpec(Integer.MAX_VALUE>>2, MeasureSpec.AT_MOST);super.onMeasure(widthMeasureSpec, expandSpec);}@Overrideprotected 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;@Overridepublic 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);}
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------



原创粉丝点击