---
title: "snapFlingBehavior"
description: "A [TargetedFlingBehavior] that performs snapping to a given position in a layout.

You can use [SnapLayoutInfoProvider.calculateApproachOffset] to indicate that snapping should
happen after this offset. If the velocity generated by the fling is high enough to get there,
we'll use [decayAnimationSpec] to get to that offset and then we'll snap to the next bound
calculated by [SnapLayoutInfoProvider.calculateSnapOffset] using [snapAnimationSpec].

If the velocity is not high enough, we'll use [snapAnimationSpec] to approach and the same spec
to snap into place.

Please refer to the sample to learn how to use this API."
type: "function"
---

<div class='type'>Function</div>


<a id='references'></a>
<div class='sourceset sourceset-common'>Common</div>


```kotlin
fun snapFlingBehavior(
    snapLayoutInfoProvider: SnapLayoutInfoProvider,
    decayAnimationSpec: DecayAnimationSpec<Float>,
    snapAnimationSpec: AnimationSpec<Float>,
): TargetedFlingBehavior
```


A `TargetedFlingBehavior` that performs snapping to a given position in a layout.

You can use `SnapLayoutInfoProvider.calculateApproachOffset` to indicate that snapping should
happen after this offset. If the velocity generated by the fling is high enough to get there,
we'll use `decayAnimationSpec` to get to that offset and then we'll snap to the next bound
calculated by `SnapLayoutInfoProvider.calculateSnapOffset` using `snapAnimationSpec`.

If the velocity is not high enough, we'll use `snapAnimationSpec` to approach and the same spec
to snap into place.

Please refer to the sample to learn how to use this API.

#### Parameters

| | |
| --- | --- |
| snapLayoutInfoProvider | The information about the layout being snapped. |
| decayAnimationSpec | The animation spec used to approach the target offset when the fling velocity is large enough. Large enough means large enough to naturally decay. |
| snapAnimationSpec | The animation spec used to finally snap to the correct bound. |




## Code Examples
### SnapFlingBehaviorCustomizedSample
```kotlin
@Composable
fun SnapFlingBehaviorCustomizedSample() {
    val state = rememberLazyListState()
    // If you'd like to customize either the snap behavior or the layout provider
    val snappingLayout = remember(state) { SnapLayoutInfoProvider(state) }
    val flingBehavior = rememberSnapFlingBehavior(snappingLayout)
    LazyRow(
        modifier = Modifier.fillMaxSize(),
        verticalAlignment = Alignment.CenterVertically,
        state = state,
        flingBehavior = flingBehavior,
    ) {
        items(200) {
            Box(
                modifier =
                    Modifier.height(400.dp).width(200.dp).padding(8.dp).background(Color.Gray),
                contentAlignment = Alignment.Center,
            ) {
                Text(it.toString(), fontSize = 32.sp)
            }
        }
    }
}
```
### SnapFlingBehaviorSimpleSample
```kotlin
@Composable
fun SnapFlingBehaviorSimpleSample() {
    val state = rememberLazyListState()
    LazyRow(
        modifier = Modifier.fillMaxSize(),
        verticalAlignment = Alignment.CenterVertically,
        state = state,
        flingBehavior = rememberSnapFlingBehavior(lazyListState = state),
    ) {
        items(200) {
            Box(
                modifier =
                    Modifier.height(400.dp).width(200.dp).padding(8.dp).background(Color.Gray),
                contentAlignment = Alignment.Center,
            ) {
                Text(it.toString(), fontSize = 32.sp)
            }
        }
    }
}
```

