I have as an example the following Composable:
@Composable
fun CustomCanvas(
) {
Box(
Modifier
.aspectRatio(1.33f)
.fillMaxWidth())
}
How do I know the size of this object after composition?
Why I want to know: I'm trying to resize and place images on a canvas. This requires knowing the size of the canvas. And no, I don't want to hardcode the size of the canvas. How to do this?
You can use the onGloballyPositioned
modifier:
var size by remember { mutableStateOf(IntSize.Zero) }
Box(Modifier.onGloballyPositioned { coordinates ->
size = coordinates.size
}) {
//...
}
Also the Canvas
has a DrawScope
which has the size
property.
Canvas() {
val canvasSize = size
}
You can do this several ways. BoxWithConstraints
does not always return correct size because as the name describes it returns Constraints
. Max width or height of Constraints
doesn't always match width or height of your Composable.
Using Modifier.onSizeChanged{size:IntSize} or Modifier.onGloballyPositioned{} with a mutableState causes another recomposition which might cause change in UI on next frame.
You can check this answer out how to get exact size without recomposition and exact size on every occasion.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With