public class MyView extends View {
private Paint paint1 = new Paint();
private Paint paint2 = new Paint();
private Paint paint3 = new Paint();
private boolean useCenter = true;
private float[] textSizeArray = new float[] {15,18,21,24,27};
public MyView(Context context) {
super(context);
setBackgroundColor(Color.WHITE);
paint1.setColor(Color.BLACK);
paint2.setStrokeWidth(2);
paint2.setColor(Color.RED);
paint2.setStrokeWidth(4);
paint3.setColor(Color.BLUE);
paint3.setStrokeWidth(6);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
// 像素点
canvas.drawPoint(60, 120, paint3);
canvas.drawPoint(70, 130, paint3);
canvas.drawPoints(new float[] {70,140,75,145,75,160}, paint2);
// 直线
canvas.drawLine(10, 10, 300, 10, paint1);
canvas.drawLine(10, 30, 300, 30, paint2);
canvas.drawLine(10, 50, 300, 50, paint3);
// 正方形
drawLinesExt(canvas, new float[] { 10, 70,120,70,120,170,10,170 },paint2);
drawLinesExt(canvas, new float[] {25,85,105,85,105,155,25,155 },paint3);
//三角形
drawLinesExt(canvas, new float[] {160,70,230,150,170,155}, paint2);
// 设置非填充状态
paint2.setStyle(Style.STROKE);
// 画实心圆
canvas.drawCircle(260,110, 30, paint2);
RectF rectF = new RectF();
rectF.left = 30;
rectF.top = 190;
rectF.right = 120;
rectF.bottom = 280;
// 画弧
canvas.drawArc(rectF, 0, 200, useCenter, paint2);
rectF.left = 140;
rectF.top = 190;
rectF.right = 280;
rectF.bottom = 290;
paint2.setStyle(Style.STROKE);
// 画空心椭圆
canvas.drawArc(rectF, 0, 360, useCenter, paint2);
rectF.left = 160;
rectF.top = 190;
rectF.right = 280;
rectF.bottom = 280;
paint3.setStyle(Style.STROKE);
// 画空心圆
canvas.drawArc(rectF, 0, 360, useCenter, paint3);
float y = 0;
// 绘制文本
for (int i = 0; i < textSizeArray.length; i++) {
paint1.setTextSize(textSizeArray[i]);
paint1.setColor(Color.BLUE);
canvas.drawText("android(宽度: "+paint1.measureText("Android")+")", 20, 315+y, paint1);
y += paint1.getTextSize()+5;
}
paint1.setTextSize(22);
// 绘制文本,单独设置每一个字符的坐标。第一个坐标(180,230)是"圆"的坐标,(210,250)是“形”的坐标
canvas.drawPosText("圆形",new float[] {180,230,210,250}, paint1);
}
// 触摸事件改变
@Override
public boolean onTouchEvent(MotionEvent event) {
if (useCenter) {
useCenter = false;
paint1.setColor(Color.RED);
paint2.setColor(Color.BLACK);
paint3.setColor(Color.GREEN);
}
else {
useCenter = true;
paint1.setColor(Color.BLACK);
paint2.setColor(Color.RED);
paint3.setColor(Color.BLUE);
}
for (int i = 0; i < textSizeArray.length/2; i++) {
float textSize = textSizeArray[i];
textSizeArray[i] = textSizeArray[textSizeArray.length-i-1];
textSizeArray[textSizeArray.length-i-1] = textSize;
}
invalidate(); // 重绘
return super.onTouchEvent(event);
}
private void drawLinesExt(Canvas canvas, float[] pts, Paint paint) {
for (int i = 0; i < pts.length; i +=2) {
int stopxIndex = i+2;
int stopyIndex =i+3;
// 设置最后一个点的横坐标索引为起始点的横坐标索引
if (stopxIndex >pts.length-1) {
stopxIndex = 0;
}
// 设置最后一个点的纵坐标索引为起始点的纵坐标索引
if (stopyIndex > pts.length-1) {
stopyIndex = 1;
}
canvas.drawLine(pts[i], pts[i+1], pts[stopxIndex], pts[stopyIndex], paint);
}
}
}