-
在创建新的控件或修改现有的控件时,我们都会涉及到重写控件或View的onDraw方法。onDraw方法会传入一个Canvas对象,它是你用来绘制控件视觉界面的画布。
-
在onDraw方法里,我们经常会看到调用save和restore方法,它们到底是干什么用的呢?
-
Canvas.save():用来保存Canvas的状态。(Canvas的壮态是指可以调用Canvas相应的方法对Canvas进行平移、放缩、旋转、错切、裁剪等操作的)。
-
Canvas.restore():用来恢复Canvas之前保存的状态。防止save后对Canvas执行的操作对后续的绘制有影响。
-
save和restore要配对使用(restore可以比save少,但不能多),如果restore调用次数比save多,会引发Error。 在读Android SDK里面的samples里面游戏的时候,很多时候都看到对canvas的save()和restore()运用。下面是onDraw函数中的代码片段,使得旋转红色方块的时候,保证蓝色方块不受影响。
-
Paint mPaint = new Paint(); -
mPaint.setColor(Color.BLUE); -
canvas.drawRect(100, 200, 200, 300, mPaint); -
canvas.save(); //注释1 -
canvas.rotate(45); -
mPaint.setColor(Color.RED); -
canvas.drawRect(150, 10, 200, 60, mPaint); -
canvas.restore(); //注释2 -
mPaint.setColor(Color.GREEN); -
canvas.drawRect(200, 10, 250, 100, mPaint); - 如果上面的代码,注释1和注释2部分的代码被注释的话,那么最后一次画的绿色方块一样会被旋转,而使用了注释1、注释2的话,绿色的方块就不会被旋转了
(完)