- 恢复画布有两个函数:restore()与rest无论哪种* 恢复画布有两个函数:restore()与restongoCount()
- restore()就是把回退栈中的最上层画布状态出栈,恢复画布状态,具体使用
- restoreToCount(int count)
public int save();
public int save(int saveFlags)
public int saveLayer(RectF bounds, Paint paint, int saveFlags)
public int saveLayer(float left, float top, float right, float bottom ,Paint paint, int saveFlags)
public int save:ayerAlpha(REctF bounds, int alpha, int saveFlags)
public int saveLayerAlpha(float left, float top ,float right, float bottom, int alpha, int saveFlags);
- 在 save()、saveLayer()、saveLayerAlpha()函数保存画布后,都会返回一个ID值,这个ID值表示当前的画布 的栈层索引(从0开始)。比如,保存在第三层,则返回2
//表示一直退栈,直到将指定索引的画布信息退出来,之后的栈的最上层的画布信息将作为最新的画布
public void restoreToCount(int saveCount);
eg:
public class RestoreToCountView extends View {
private Paint paint;
public RestoreToCountView(Context context, AttributeSet attrs) {
super(context, attrs);
paint = new Paint();
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
int id1 = canvas.save();
canvas.clipRect(0, 0, 800, 800);
canvas.drawColor(Color.BLACK);
System.out.println(id1);
int id2 = canvas.saveLayer(0, 0, getWidth(), getHeight(), paint, Canvas.ALL_SAVE_FLAG);
canvas.clipRect(100, 100, 700, 700);
canvas.drawColor(Color.RED);
System.out.println(id2);
int id3 = canvas.saveLayerAlpha(0, 0, getWidth(),getHeight(), 0xf0, Canvas.ALL_SAVE_FLAG);
canvas.clipRect(200, 200, 600, 600);
canvas.drawColor(Color.YELLOW);
System.out.println(id3);
int id4 = canvas.save();
canvas.clipRect(300, 300, 500, 500);
canvas.drawColor(Color.BLUE);
System.out.println(id4);
//恢复到生成id3之前的画布状态
canvas.restoreToCount(id3);
canvas.drawColor(Color.GREEN);
}
}
restore()和restoreToCount(int count)的关系
- 两者针对的是同一个栈,可以完全通用
- restore()默认将栈顶的内容退出还原画布
- restoreToCount(int count)函数则一直退栈,直到把指定的索引的画布信息退出来,之后栈顶的画布信息作为最新的画布
- 无论哪种save()无论哪种flag,都是放到一个栈中
结论:
- restore()的含义是把回退栈中的最上层画布状态出栈,恢复画布状态
- restoreToCount(int count)是一直出栈,知道哦把指定画布的信息退出来,讲次至此之前的所有动作都恢复
- 无论哪种save()函数,哪个flag,保存画布时都是使用一个栈
- restore()与restoreToCount(int count)针对的都是同一个栈,所以完全可以通用