canvas.save()用来保存当前的画布状态,此时如果对画布进行了translate,rotate操作,此时画布位置发生了变化,调用canvas.restore()之后画布可以恢复到save之前的状态。
通过简单实例来说明。
{
mPaint1.setColor(Color.GREEN);
mPaint1.setStyle(Paint.Style.FILL);
mPaint2.setColor(Color.RED);
mPaint2.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(1, 1, getMeasuredWidth() - 1, getMeasuredHeight() - 1, mPaint1);
canvas.save();
canvas.translate(50, 50);
canvas.restore();
canvas.drawRect(10, 10, getMeasuredWidth() - 10, getMeasuredHeight() - 10, mPaint2);
super.onDraw(canvas);
}
此时效果:
未调用save和restore
{
mPaint1.setColor(Color.GREEN);
mPaint1.setStyle(Paint.Style.FILL);
mPaint2.setColor(Color.RED);
mPaint2.setStyle(Paint.Style.FILL);
}
@Override
protected void onDraw(Canvas canvas) {
canvas.drawRect(1, 1, getMeasuredWidth() - 1, getMeasuredHeight() - 1, mPaint1);
// canvas.save();
canvas.translate(50, 50);
// canvas.restore();
canvas.drawRect(70, 70, getMeasuredWidth() - 70, getMeasuredHeight() - 70, mPaint2);
super.onDraw(canvas);
}
此时效果: