android canvas save和restore

来源:互联网 发布:linux中文输入法 编辑:程序博客网 时间:2024/05/29 07:51

首先在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或ViewonDraw方法。

onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。 

onDraw方法里,我们经常会看到很多调用saverestore方法,他们具体是做什么用的,有什么我们需要知道的呢?

 save:用来保存Canvas的状态。save之后,可以调用Canvas的平移、放缩、旋转、错切、裁剪等操作。

 restore:用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。

    saverestore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error


下面我们写下代码测试下:

   int px = getMeasuredWidth();        int py = getMeasuredWidth();// 背景        canvas.drawRect(0, 0, px, py, backgroundPaint);        canvas.save();        canvas.rotate(90, px/2, py/2);// 向上的箭头        canvas.drawLine(px / 2, 0, 0, py / 2, linePaint);        canvas.drawLine(px / 2, 0, px, py / 2, linePaint);        canvas.drawLine(px / 2, 0, px / 2, py, linePaint);        canvas.restore();// 圆点        canvas.drawCircle(px - 10, py - 10, 10, linePaint);


那么我们了解下canvas.rotate具体做了什么,这是我开始不理解的地方而且非常重要,看图


顺时针转动90度后


我们需要知道的是坐标系也跟着变了,所以你画的向上的箭头实际上就是向右的

然而ondraw或者restore之后画布会回到之前的状态,但是你之前画的图不会跟着回去了,这点也很重要。


以上,如有错误请指正。


0 0
原创粉丝点击