drawLayer
Function
Common
fun DrawScope.drawLayer(graphicsLayer: GraphicsLayer)
Draw the provided GraphicsLayer into the current DrawScope. The GraphicsLayer provided must
have GraphicsLayer.record invoked on it otherwise no visual output will be seen in the rendered
result.
Code Examples
GraphicsLayerAlphaSample
fun DrawScope.GraphicsLayerAlphaSample(layer: GraphicsLayer) {
    // Create a layer sized to the destination draw scope that is comprised
    // of an inset red rectangle
    layer.apply {
        record { inset(20f, 20f) { drawRect(Color.Red) } }
        // Renders the content of the layer with 50% alpha when it is drawn
        // into the destination
        alpha = 0.5f
    }
    drawLayer(layer)
}
GraphicsLayerColorFilterSample
fun DrawScope.GraphicsLayerColorFilterSample(layer: GraphicsLayer) {
    // Create a layer with the same configuration as the destination DrawScope
    // and draw a red rectangle in the layer
    layer.apply {
        record { drawRect(Color.Red) }
        // Apply a ColorFilter that will tint the contents of the layer to blue
        // when it is drawn into the destination DrawScope
        colorFilter = ColorFilter.tint(Color.Blue)
    }
    drawLayer(layer)
}
GraphicsLayerRenderEffectSample
@RequiresApi(Build.VERSION_CODES.S)
fun DrawScope.GraphicsLayerRenderEffectSample(layer: GraphicsLayer) {
    // Create a layer sized to the destination draw scope that is comprised
    // of an inset red rectangle
    layer.apply {
        record { inset(20f, 20f) { drawRect(Color.Red) } }
        // Configure a blur to the contents of the layer that is applied
        // when drawn to the destination DrawScope
        renderEffect = BlurEffect(20f, 20f, TileMode.Decal)
    }
    drawLayer(layer)
}
GraphicsLayerRotationX
fun DrawScope.GraphicsLayerRotationX(layer: GraphicsLayer) {
    layer.apply {
        record { drawRect(Color.Yellow) }
        // Rotates the yellow rect 45f clockwise relative to the x axis
        rotationX = 45f
    }
    drawLayer(layer)
}
GraphicsLayerRotationYWithCameraDistance
fun DrawScope.GraphicsLayerRotationYWithCameraDistance(layer: GraphicsLayer) {
    layer.apply {
        record { drawRect(Color.Yellow) }
        // Rotates the yellow rect 45f clockwise relative to the y axis
        rotationY = 45f
        cameraDistance = 5.0f
    }
    drawLayer(layer)
}
GraphicsLayerScaleAndPivotSample
fun DrawScope.GraphicsLayerScaleAndPivotSample(layer: GraphicsLayer) {
    // Create a 200 x 200 pixel layer that has a red rectangle drawn in the lower right
    // corner.
    layer.apply {
        record(size = IntSize(200, 200)) {
            drawRect(Color.Red, topLeft = Offset(size.width / 2f, size.height / 2f))
        }
        // Scale the layer by 1.5x in both the x and y axis relative to the bottom
        // right corner
        scaleX = 1.5f
        scaleY = 1.5f
        pivotOffset = Offset(this.size.width.toFloat(), this.size.height.toFloat())
    }
    // Draw the layer into the provided DrawScope
    drawLayer(layer)
}
GraphicsLayerTopLeftSample
fun DrawScope.GraphicsLayerTopLeftSample(layer: GraphicsLayer) {
    // Build the layer with the density, layout direction and size from the DrawScope
    // and position the top left to be 20 pixels from the left and 30 pixels from the top.
    // This will the bounds of the layer with a red rectangle
    layer.apply {
        record { drawRect(Color.Red) }
        this.topLeft = IntOffset(20, 30)
    }
    // Draw the layer into the provided DrawScope
    drawLayer(layer)
}
