首页 > 其他分享 >Canvas与图层(三)恢复画布

Canvas与图层(三)恢复画布

时间:2023-01-06 10:35:48浏览次数:36  
标签:Canvas int float canvas 画布 图层 save public


  • 恢复画布有两个函数: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)针对的都是同一个栈,所以完全可以通用


标签:Canvas,int,float,canvas,画布,图层,save,public
From: https://blog.51cto.com/u_13987312/5992405

相关文章