canvas的save和restore

       经过画图琢磨,终于理解 canvas的save和restore的用意了,上效果图和:代码

       左下角画一个圆、中间画一个向右箭头、右上角画一个圆

使用了restore的效果如下: 


不使用restore的效果如下:



	/**
	 * 在画布的 左下角画圆,
	 * 中间画向右箭头 :旋转画布后再画
	 * 右上角画圆:画布旋转为原始方向后再画
	 * @param canvas
	 */
	private void canvasTest(Canvas canvas) {
		int width = 200;
		int height = 200;
		int radius = 10;
		int centerX = radius;
		int centerY = height - radius;
		Paint paint = new Paint();
		//画做左下角的圆
		paint.setStyle(Style.FILL);
		paint.setColor(Color.BLUE);
		paint.setAntiAlias(true);
		canvas.drawCircle(centerX, centerY, radius, paint);
		
		canvas.save();
		//画三角形
		canvas.rotate(90, width/2, height/2);   //以画布中心为旋转点
//		canvas.translate(0, -30);
//		canvas.scale(1.2f, 1.2f, width/2, height/2);	
		
		paint.setColor(Color.RED);
		paint.setStyle(Style.STROKE);
		paint.setStrokeWidth(4);
		//左线、右线、中线, 把旋转后的当做新画布,但x, y 的坐标仍是原来方向的,但画出的图是旋转后的
		//可以想象为先在原始画布上画,画好后旋转
		canvas.drawLine(width/2, 0, 0, height/2, paint);
		canvas.drawLine(width/2, 0, width, height/2, paint);
		canvas.drawLine(width/2, 0, width/2, height, paint);
		canvas.restore();  //如果不加这一行,那么下面的那个右上角的圆是 旋转后的画布的右上角,而非原始画布的右上角位置
		
		//右上角画个圆
		int cx2 = width - radius;
		int cy2 = radius;
		paint.setStyle(Style.FILL);
		paint.setColor(Color.RED);
		canvas.drawCircle(cx2, cy2, radius, paint);
	}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值