我希望 saveLayer 方法允许我在不同的“图层”上绘图,然后在绘图完成后,按照我选择的顺序将图层与 Canvas 合并。
显而易见的问题是“为什么不重新安排绘图操作呢?”答案是我不能:
我有一条路径需要绘制到 Canvas 上。在背景/最低 z-index 中,我想绘制封闭的路径,并使用填充样式添加一些额外的点。然后最重要的是,我只想画出路径中原来的点的轮廓。
由于我无法撤消向路径添加的点,我唯一的选择是克隆路径,或者绘制到第二层,稍后可以将其放置在其他所有层之上。
saveLayer() 似乎提供了该功能,但它的行为与我预期的不同。我的操作的基本流程是这样的:
int overlay = canvas.saveLayer(...);
// drawing operations for my uppermost layer
...
int background = canvas.saveLayer(...);
// drawing operations for my background layer
...
// merge the offscreen background bitmap with the canvas:
canvas.restoreToCount(background);
// merge the offscreen overlay bitmap with the canvas:
canvas.restoreToCount(overlay);
代码运行时,background 和 overlay 的顺序完全没有变化;首先绘制的在底部,最后绘制的在顶部。对我来说更奇怪的是,我可以完全注释掉对 restoreToCount() 的调用并且没有任何变化。根据 javadoc,在调用平衡 restore() 之前,不应在 Canvas 上绘制任何内容。
显然我完全误解了这个方法的功能。任何人都可以帮助我了解 saveLayer 的用法,或者建议一种对我的绘图操作进行分层的替代方法吗?
谢谢! 尼克
最佳答案
saveLayer() 不允许您以随机顺序重新排列图层。唯一的方法是自己绘制屏幕外位图。另请注意,您的 View 的父级将在您的 onDraw() 调用周围调用 save()/restore(),这将导致您的图层被合成。
关于java - 了解 Android 的 Canvas.saveLayer(...),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5121302/