canvas里面save() 和restore()

canvas.save()canvas.restore()是两个相互匹配出现的,作用是用来保存画布的状态和取出保存的状态的。
Canvas相当于一块画布,该类中常用的方法如下:

drawRect(RectF rect, Paint paint)
drawPath(Path path, Paint paint)
drawBitmap(Bitmap bitmap, Rect src, Rect dst, Paint paint)
drawLine(float startX, float startY, float stopX, float stopY, Paintpaint)
drawPoint(float x, float y, Paint paint)
drawText(String text, float x, floaty, Paint paint)
drawCircle(float cx, float cy, float radius,Paint paint)
drawArc(RectF oval, float startAngle, float sweepAngle, boolean useCenter, Paint paint)

save:用来来保存Canvas的状态。save之后,可以调用Canvas的平移、放自缩、旋转百、错切、裁剪等操作。
restore:用来恢复Canvas之前度保存的状态。防止save后对Canvas执行的知操作对后续的绘制有影道响。

做一个简单的demo验证!
首先获取View的宽高尺寸

intx = getMeasuredWidth();inty = getMeasuredWidth();

然后画圆

canvas.drawCircle(x /2, y /2, x /2, paint);//画最外面的圆

3、画刻度

paint.setColor(Color.BLUE);//画刻度
canvas.drawLine(x /2, y /8, x /2,0, paint);
canvas.save();
//注意,这里调用了保存canvas的方法
for(inti = 0; i < 3; i++) {
	canvas.rotate(30, x /2, y /2);
	canvas.drawLine(x /2, y /8, x /2,0, paint);
}

在这里插入图片描述
此时,画布已经顺时针旋转了3个30度,即90度。并且,在旋转画布之前已经调用了canvas.save()方法,所以此时保存的canvas的状态是未旋转时的正常状态。
在这里插入图片描述

//给画笔加粗,换成黄色
paint.setStrokeWidth(10);paint.setColor(Color.YELLOW);
//画一条黄色粗线,便于区分
canvas.drawLine(x/2,y/2,x/2,y/4, paint);

观察运行效果图,最新绘制的黄线已经被旋转了90度。为什么呢?因为画布已经在之前旋转了90度了。
在这里插入图片描述
下面在绘制黄线的代码之前,调用canvas.restore()恢复画布的状态

canvas.restore();//恢复画布状态paint.setStrokeWidth(10);
paint.setColor(Color.YELLOW)
canvas.drawLine(x/2,y/2,x/2,y/4, paint);

黄线又恢复了正常显示。

当然,不使用canvas.restore(),而是继续旋转-90度画布,也是可以恢复画布到初始状态的。canvas.rotate(-90, x /2, y /2);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值