canvas 绘制各种简单图形

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

}

 

 

猜你喜欢

转载自284772894.iteye.com/blog/1845851