Start native apps faster with the Composables CLI ->
Function

movable

Configures this subspace element to be interactive and movable.

BasicMovableSample

/** A sample demonstrating a simple movable component. */
@SubspaceComposable
@Composable
public fun BasicMovableSample() {
    SpatialPanel(
        modifier = SubspaceModifier.movable(enabled = true, movePolicy = MovePolicy.default())
    ) {
        Text("The user can move me around!")
    }
}

CustomMovableSample

/** A sample demonstrating a custom movable component. */
@SubspaceComposable
@Composable
public fun CustomMovableSample() {
    var offsetX by remember { mutableStateOf(0.dp) }
    var offsetY by remember { mutableStateOf(0.dp) }
    var offsetZ by remember { mutableStateOf(0.dp) }
    var rotation by remember { mutableStateOf(Quaternion.Identity) }
    val density = LocalDensity.current
    val customMovement: (SpatialMoveEvent) -> Unit = { moveEvent ->
        offsetX = with(density) { moveEvent.pose.translation.x.toDp() }
        offsetY = with(density) { moveEvent.pose.translation.y.toDp() }
        offsetZ = with(density) { moveEvent.pose.translation.z.toDp() }
        rotation = moveEvent.pose.rotation
    }
    SpatialPanel(
        modifier =
            SubspaceModifier.movable(
                    enabled = true,
                    movePolicy = MovePolicy.custom(onMove = customMovement),
                )
                .offset(x = offsetX, y = offsetY, z = offsetZ)
                .rotate(rotation)
    ) {
        Text("The user can move me around!")
    }
}

Last updated: