一款五子棋小游戏,可以拿来联系一下自定义View Demo源码下载: 源码 (studio上面构建的项目,导入时要配置一下gradle文件)
1.写一个类继承View
/**
* Created by fanday on 2016/4/23.
*/
public class PieceView extends View {
private int lineNum=10;//棋盘的行列数
private float lineHeight;//每一行的行高
private int width;//棋盘的边长(棋盘是正方形的)
private Paint paint;
public PieceView(Context context) {
this(context,null);//一个参数的构造调用两个的,最终都走三个参数的构造
}
public PieceView(Context context, AttributeSet attrs) {
this(context, attrs,0);
}
public PieceView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
init();//构造方法中需要初始化的变量
}
2.在构造方法中调用初始化方法,初始化一些变量
private Bitmap whitePiece;//白棋
private Bitmap blackPiece;//黑棋
private double intScale=0.75;//棋子显示到棋盘上面是以棋盘的网格大小为基准的,棋子的缩放比例
private Paint piecePaint;//画棋子的画笔对象
private void init() {
piecePaint=new Paint(Paint.ANTI_ALIAS_FLAG);
paint=new Paint();//画网格的画笔对象
paint.setAntiAlias(true);
paint.setColor(0xffff0000);
paint.setStyle(Paint.Style.STROKE);//设置画笔只描边
this.setBackgroundColor(0x44aaaaaa);
whitePiece= BitmapFactory.decodeResource(getResources(), R.drawable.white);
blackPiece=BitmapFactory.decodeResource(getResources(),R.drawable.black);
}
3.在onMeasure()方法中对View的宽高测量模式进行判断
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
int widthSize=MeasureSpec.getSize(widthMeasureSpec);//获取宽度的sixe
int widthMode = MeasureSpec.getMode(widthMeasureSpec);//获取宽度的Mode
int heightSize=MeasureSpec.getSize(heightMeasureSpec);
int heightMode=MeasureSpec.getMode(heightMeasureSpec);
if(widthMode==MeasureSpec.UNSPECIFIED){//如果宽度的测量模式不确定,就让宽度=高度
widthSize=heightSize;
}
else if(heightMode==MeasureSpec.UNSPECIFIED){//若果高度的测量模式不确定的,就让宽度=宽度
widthSize=widthSize;
}
setMeasuredDimension(widthSize,widthSize);//设置view的宽高
}
private boolean isWhiteWin;
private