美文网首页
【Flutter API】CustomPaint

【Flutter API】CustomPaint

作者: popesa | 来源:发表于2021-12-05 13:09 被阅读0次

    一个小部件,提供在绘制阶段在其上绘制的画布。其父类是SingleChildRenderObjectWidget
    在绘制时,CustomPaint首先让字段painter进行绘制,然后再来绘制child,最后让foregroundPainter来绘制。画布的卡迪尔坐标系与当前类对象的卡迪尔坐标系相匹配。属性painter被期望在一个矩形内绘制,从原点开始并包含给定大小的区域。(如果painter在这些边界之外绘制,可能会分配不够的内存来栅格化绘制命令,并且产生的行为是未知的。)为了强制在指定区域内绘画,可以考虑将此组件包裹在ClipRect中。
    通过实现CustomPainter来创建画家(painter)。
    因为在绘制期间,自定义的paint调用它的painter,所以在回调期间对于当前帧的布局已经完成,也就不能够调用setState或markNeedsLayout。
    自定义的painter通常根据他们的子元素来调整自己的尺寸。如果他们没有子节点,他们尝试将自己的大小调整为size,默认为Size.zero。属性size不能为空。
    isComplexwillChange是对组合器的光栅化缓存的提示,它们不能为空。

    构造器

    CustomPaint({Key? key, CustomPainter? painter, CustomPainter? foregroundPainter, Size size, bool isComplex, bool willChange, Widget? child}) 创建代理绘画的组件。

    属性

    childWidget?

    foregroundPainterCustomPainter? 在绘制完child组件后进行的绘制。

    isComplexbool 绘画是否复杂到需要缓存。
    组合器包含一个栅格缓存,用来保存层的位图,以避免在每帧上重复渲染这些层的成本。如果没有设置此标志,组合器会使用自己的算法来决定是否需要对该层进行缓存。
    如果painterforegroundPainter都是null,这个属性值将会被忽略。

    painterCustomPainter?

    sizeSize 给定布局约束,如果没有子元素,CustomPaint应该绘制的大小。默认值为Size.zero。如果属性child不为null,此属性值会被child的size代替。

    willChangebool 是否需要通知光栅缓存,在下一帧中,绘制需要变化。如果painterforegroundPainter都是null,这个属性值将会被忽略。

    方法

    createRenderObject(BuildContext context) → RenderCustomPaint 使用RenderObjectWidget描述的配置,创建这个RenderObjectWidget表示的RenderObject类的实例。
    这个方法不应该做任何与render object子元素相关的事。这应该由覆盖RenderObjectElement的方法来处理。这应该由该对象的createElement方法在呈现的对象中覆盖RenderObjectElement.mount的方法来处理。可在SingleChildRenderObjectElement.mount中查看。

    didUnmountRenderObject(<wbr style="box-sizing: inherit;">covariant RenderCustomPaint renderObject) → void 以前与此小部件关联的渲染对象已从树中删除。

    updateRenderObject(BuildContext context, covariant RenderCustomPaint renderObject) → void 将当前对象的配置拷贝给参数renderObject,参数与方法createRenderObject的返回值类型应该相同。

    相关文章

      网友评论

          本文标题:【Flutter API】CustomPaint

          本文链接:https://www.haomeiwen.com/subject/fyjmxrtx.html