Skip to content

PinchGrid

Signature

@Composable
fun PinchGrid(
state: PinchGridState,
modifier: Modifier = Modifier,
gridState: LazyGridState = rememberLazyGridState(),
contentPadding: PaddingValues = PaddingValues(),
verticalArrangement: Arrangement.Vertical = Arrangement.spacedBy(0.dp),
horizontalArrangement: Arrangement.Horizontal = Arrangement.spacedBy(0.dp),
thresholdFraction: Float = PinchGridDefaults.ThresholdFraction,
transitionSpec: ColumnTransitionSpec = PinchGridDefaults.TransitionSpec,
gestureEnabled: Boolean = true,
onColumnChanged: ((newCount: Int) -> Unit)? = null,
content: LazyGridScope.() -> Unit,
)

Parameters

ParameterTypeDefaultDescription
statePinchGridStaterequiredState holder created by rememberPinchGridState()
modifierModifierModifierModifier for the outer container
gridStateLazyGridStaterememberLazyGridState()State for the underlying LazyVerticalGrid
contentPaddingPaddingValuesPaddingValues()Padding around the grid content
verticalArrangementArrangement.VerticalspacedBy(0.dp)Vertical spacing between items
horizontalArrangementArrangement.HorizontalspacedBy(0.dp)Horizontal spacing between items
thresholdFractionFloat0.45fScale change fraction required to trigger column snap
transitionSpecColumnTransitionSpecNoneTransition animation between column layouts
gestureEnabledBooleantrueWhether pinch gesture is active
onColumnChanged((Int) -> Unit)?nullCallback when column count changes
contentLazyGridScope.() -> UnitrequiredGrid content using LazyGridScope DSL

Notes

  • The content lambda uses the standard LazyGridScope DSL — items(), item(), stickyHeader() etc.
  • Passing a custom gridState lets you observe scroll position or programmatically scroll
  • The breathing scale effect is applied automatically via graphicsLayer