我想知道为什么以及何时使用canvas.save
、canvas.restore
,甚至可能使用canvas.saveLayer
。
我听说它们确实很有用,但我不知道何时使用它们。
canvas.save
和canvas.saveLayer
的工作方式略有不同,但它们都具有相同的对应关系:
这允许您恢复保存堆栈上最近的条目之前的状态,即它“弹出当前保存堆栈”。这意味着在当前状态下对画布所做的任何转换和剪辑都将被删除,如果使用了saveLayer
,则保存的层将被合成到画布中(绘制顺序将保持不变)。
正如我前面提到的,这允许您保存画布所处的状态。您可以执行所需的任何转换和剪辑,这些转换和剪辑将使用restore
删除:
canvas.save();
canvas.transform(..); // Transforms the canvas, which will affect the draw call.
canvas.drawRect(...); // Affected by the transform.
canvas.restore();
canvas.drawRect(...); // Not affected by the transform.
请注意,RenderObject
的所有子级将使用相同的PaintingContext
,即相同的Canvas
。因此,如果您在单个子级中转换画布,它也将为随后绘制的所有其他子级进行转换。这可能是不需要的行为,也是您总是希望保存
和还原
画布状态的原因。
这有点复杂,我敦促您阅读此方法的全面文档。顺便说一句,截至2019年1月,savelayer
在Flutter web中不起作用。
savelayer
和save
之间的基本区别在于,savelayer
将在使用restore
时合成层。对于一个简单的示例,我构造了这个没有bounds
(这就是为什么传递null
)的代码段,这将保存整个画布:
canvas.drawRect(rect, Paint()..color = const Color(0xffff0000)); // Draws a red rect.
canvas.saveLayer(null, Paint()..blendMode = BlendMode.multiply); // Saves the whole canvas.
canvas.drawRect(
rect.shift(const Offset(20, 20)),
Paint()..color = const Color(0xff0000ff), // Draws a blue rect.
);
canvas.restore(); // Composites the red rect into the blue rect.
这是没有savelayer
的示例的样子:
问题内容: 我做了 我试图弄清楚输出,可以看到很多共享库都按预期映射到了内存映射段。 到最后有类似的东西 是什么和意味着什么?是vsyscall内存的内核部分吗?如果有人可以在这个问题上有所启发,那就太好了。 问题答案: 该 vsyscall 和 VDSO 段用于加速Linux的某些系统调用的机制。例如,通常是通过此机制调用的。引入的第一个机制是 vsyscall ,它是作为执行特定系统调用的一种
问题内容: 有人能说明一下JVM选项是什么和是谁?具体来说,何时/为什么要更改?如何确定合适的尺寸? 这就是文档所说的: -XX:ReservedCodeCacheSize = 32m保留的代码缓存大小(以字节为单位)-最大代码缓存大小。[Solaris 64位,amd64和-server x86:2048m;在1.5.0_06和更早版本中,Solaris 64位和and64:1024m。] 问题
问题内容: 我是CSS的初学者,而前几天我在看一些CSS代码时,发现了以下几行。在我以前学习CSS的教程中,我从未见过像这些行这样的内容。有人可以向我解释这些内容吗?或者给我一个可以学习实现这些内容的资源? 问题答案: 这些是相关渲染引擎(适用于Chrome,Safari;适用于Firefox,适用于Opera,适用于Internet Explorer)提供的供应商前缀属性。通常,在W3最终澄清/
什么是BIOS 系统开机启动 BIOS,即微机的基本输入输出系统(BasicInput-Output System),是集成在主板上的一个ROM芯片,其中保存有微机系统最重要的基本输入/输出程序、系统信息设置、开机上电自检程序和系统启动自举程序。在主板上可以看到BIOSROM芯片,请参见微机主板图。一块主板性能优越与否,很大程度上取决于板上的BIOS管理功能是否先进。 一、BIOS中断例程 即BI
我做了 我试图理解输出的意义。我可以看到许多共享库按照预期映射到内存映射段。 接近尾声的时候会有类似的东西 vdso和vsyscall是什么意思?vsyscall是内存的内核部分吗?如果有人能解释一下这个问题,那就太好了。
本文向大家介绍什么是KVC和KVO?相关面试题,主要包含被问及什么是KVC和KVO?时的应答技巧和注意事项,需要的朋友参考一下 KVC(Key-Value-Coding)内部的实现:一个对象在调用setValue的时候,(1)首先根据方法名找到运行方法的时候所需要的环境参数。(2)他会从自己isa指针结合环境参数,找到具体的方法实现的接口。(3)再直接查找得来的具体的方法实现。KVO(Key-Va