棋盘

一段可以自适应宽高的简易棋盘(五条横线,五条纵线)代码;
public class CheckerBoard extends GridView
{
//声明棋盘控件宽度
private int mBoardWidth;
//声明棋盘中线的间距
private float mLineSpace;
//声明棋盘中线的个数
private int MAX_LINE=5;
//声明绘制棋盘的笔
private Paint mPaint=new Paint();
//声明棋盘中棋子的大小比例
private float ratioPieceOfHeight=3*1.0f/4;
//声明棋子宽度
private int pieceWidth;

public CheckerBoard(Context context) 
{
    super(context);
}

public CheckerBoard(Context context, AttributeSet attrs) 
{
    super(context, attrs);
    init();
}
//初始化操作
private void init() 
{
    //设置画笔属性
    mPaint.setColor(0X88000000);
    mPaint.setAntiAlias(true);
    mPaint.setDither(true);
    mPaint.setStyle(Paint.Style.STROKE);
}

public CheckerBoard(Context context, AttributeSet attrs, int defStyle) 
{
    super(context, attrs, defStyle);
    setBackgroundColor(0x44ff0000);
}

@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) 
{
    super.onMeasure(widthMeasureSpec, heightMeasureSpec);

    //获得当前控件宽高(xml文件中定义的宽高皆为match)
    int widthSize=MeasureSpec.getSize(widthMeasureSpec);
    int heightSize=MeasureSpec.getSize(heightMeasureSpec);

    //获得控件宽高模式
    int widthMode=MeasureSpec.getMode(widthMeasureSpec);
    int heightMode=MeasureSpec.getMode(heightMeasureSpec);

    //取得宽高最小值
    int width=Math.min(widthSize, heightSize);
    //如果原宽度未规定设定宽度为
    if (widthMode==MeasureSpec.UNSPECIFIED) 
    {
        width=widthSize;
    }

    else if (heightMode==MeasureSpec.UNSPECIFIED) 
    {
        width=heightSize;
    }
    //为控件设置宽和高
    setMeasuredDimension(width, width);
}

@Override
protected void onSizeChanged(int w, int h, int oldw, int oldh) {
    super.onSizeChanged(w, h, oldw, oldh);

    mBoardWidth=w;
    mLineSpace=mBoardWidth*1.0f/MAX_LINE;
    //得到棋子宽度
    pieceWidth=(int) (mLineSpace*ratioPieceOfHeight);

    setNumColumns(MAX_LINE);
}
//构建一个可以得到棋子宽度的方法
public int getPieceWdth(){
    return pieceWidth;
}

@Override
protected void onDraw(Canvas canvas) 
{
    super.onDraw(canvas);
    //绘制棋盘的方法
    drawBoard(canvas);
}

private void drawBoard(Canvas canvas) {
    int width=mBoardWidth;
    float lineSpace=mLineSpace;

    for (int i = 0; i < MAX_LINE; i++) {
        //获得横线横坐标起点终点(纵线起点终点)
        int startX=(int)(lineSpace/2);
        int stopX=(int)(width-lineSpace/2);
        //获得横线纵坐标(纵线横坐标)
        int y=(int)((0.5+i)*lineSpace);
        //绘制棋盘横线
        canvas.drawLine(startX, y, stopX, y, mPaint);
        //绘制棋盘纵线
        canvas.drawLine(y, startX, y, stopX, mPaint);
    }
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值