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); } } }