# MotionLayout

## Functions summary

|---|---|
| `inline https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ExperimentalMotionApi @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.Float,androidx.compose.ui.Modifier,kotlin.String,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)( motionScene: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene, progress: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier, transitionName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html, debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags, optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy, crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Layout that can animate between multiple `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s as defined by `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s in the given `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene`. |
| `inline https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ExperimentalMotionApi @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)( motionScene: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene, constraintSetName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?, animationSpec: https://developer.android.com/reference/kotlin/androidx/compose/animation/core/AnimationSpec<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html>, modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier, noinline finishedAnimationListener: (() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)?, debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags, optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy, crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Layout that can animate between multiple `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s as defined by `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s in the given `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene`. |
| `inline https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | `@https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ExperimentalMotionApi @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.ConstraintSet,androidx.constraintlayout.compose.ConstraintSet,kotlin.Float,androidx.compose.ui.Modifier,androidx.constraintlayout.compose.Transition,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)( start: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet, end: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet, progress: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html, modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier, transition: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition?, debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags, optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html, invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy, crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html )` Layout that can animate between two different layout states described in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s. |

## Functions

### MotionLayout

Artifact: [androidx.constraintlayout:constraintlayout-compose](https://developer.android.com/jetpack/androidx/releases/constraintlayout) [View Source](https://cs.android.com/search?q=file:androidx/constraintlayout/compose/MotionLayout.kt+function:MotionLayout)

```
@ExperimentalMotionApi
@Composable
inline fun MotionLayout(
    motionScene: MotionScene,
    progress: Float,
    modifier: Modifier = Modifier,
    transitionName: String = "default",
    debugFlags: DebugFlags = DebugFlags.None,
    optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
    invalidationStrategy: InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy,
    crossinline content: @Composable MotionLayoutScope.() -> Unit
): Unit
```

Layout that can animate between multiple `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s as defined by `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s in the given `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene`.

The animation is driven by the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.Float,androidx.compose.ui.Modifier,kotlin.String,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)` value, so it will typically be a result of using an `https://developer.android.com/reference/kotlin/androidx/compose/animation/core/Animatable` or `https://developer.android.com/reference/kotlin/androidx/compose/animation/core/animateFloatAsState.composable#animateFloatAsState(kotlin.Float,androidx.compose.animation.core.AnimationSpec,kotlin.Float,kotlin.String,kotlin.Function1)`:

```kotlin
var animateToEnd by remember { mutableStateOf(false) }
MotionLayout(
    motionScene = MotionScene {
        val buttonRef = createRefFor("button")
        defaultTransition(
            from = constraintSet {
                constrain(buttonRef) {
                    top.linkTo(parent.top)
                }
            },
            to = constraintSet {
                constrain(buttonRef) {
                    bottom.linkTo(parent.bottom)
                }
            }
        )
    },
    progress = animateFloatAsState(if (animateToEnd) 1f else 0f).value,
    modifier = Modifier.fillMaxSize()
) {
    Button(onClick = { animateToEnd = !animateToEnd }, Modifier.layoutId("button")) {
        Text("Hello, World!")
    }
}
```

Note that you must use `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/layoutId.modifier#(androidx.compose.ui.Modifier).layoutId(kotlin.Any)` to bind the references used in the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s to the Composable.

| Parameters |
|---|---|
| `motionScene: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene` | Holds all the layout states defined in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s and the interpolation associated between them (known as `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s). |
| `progress: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | Sets the interpolated position of the layout between the ConstraintSets. |
| `modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier = Modifier` | Modifier to apply to this layout node. |
| `transitionName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html = "default"` | The name of the transition to apply on the layout. By default, it will target the transition defined with `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionSceneScope#defaultTransition(androidx.constraintlayout.compose.ConstraintSetRef,androidx.constraintlayout.compose.ConstraintSetRef,kotlin.Function1)`. |
| `debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags = DebugFlags.None` | Flags to enable visual debugging. `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags#None()` by default. |
| `optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html = Optimizer.OPTIMIZATION_STANDARD` | Optimization parameter for the underlying ConstraintLayout, `https://developer.android.com/reference/kotlin/androidx/constraintlayout/core/widgets/Optimizer#OPTIMIZATION_STANDARD()` by default. |
| `invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy` | Provides strategies to optimize invalidations in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.Float,androidx.compose.ui.Modifier,kotlin.String,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. Excessive invalidations will be the typical cause of bad performance in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.Float,androidx.compose.ui.Modifier,kotlin.String,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. See `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy` to learn how to apply common strategies. |
| `crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | The content to be laid out by MotionLayout, note that each layout Composable should be bound to an ID defined in the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s using `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/layoutId.modifier#(androidx.compose.ui.Modifier).layoutId(kotlin.Any)`. |

### MotionLayout

Artifact: [androidx.constraintlayout:constraintlayout-compose](https://developer.android.com/jetpack/androidx/releases/constraintlayout) [View Source](https://cs.android.com/search?q=file:androidx/constraintlayout/compose/MotionLayout.kt+function:MotionLayout)

```
@ExperimentalMotionApi
@Composable
inline fun MotionLayout(
    motionScene: MotionScene,
    constraintSetName: String?,
    animationSpec: AnimationSpec<Float>,
    modifier: Modifier = Modifier,
    noinline finishedAnimationListener: (() -> Unit)? = null,
    debugFlags: DebugFlags = DebugFlags.None,
    optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
    invalidationStrategy: InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy,
    crossinline content: @Composable MotionLayoutScope.() -> Unit
): Unit
```

Layout that can animate between multiple `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s as defined by `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s in the given `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene`.

The animation is driven based on the given `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. During recomposition, MotionLayout will interpolate from whichever `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet` it currently is, to the one corresponding to `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. So, a null `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)` will result in no changes.

```kotlin
var name by remember { mutableStateOf(0) }
MotionLayout(
    motionScene = MotionScene {
        val buttonRef = createRefFor("button")
        val initialStart = constraintSet("0") {
            constrain(buttonRef) {
                centerHorizontallyTo(parent, bias = 0f)
                centerVerticallyTo(parent, bias = 0f)
            }
        }
        val initialEnd = constraintSet("1") {
            constrain(buttonRef) {
                centerHorizontallyTo(parent, bias = 0f)
                centerVerticallyTo(parent, bias = 1f)
            }
        }
        constraintSet("2") {
            constrain(buttonRef) {
                centerHorizontallyTo(parent, bias = 1f)
                centerVerticallyTo(parent, bias = 0f)
            }
        }
        constraintSet("3") {
            constrain(buttonRef) {
                centerHorizontallyTo(parent, bias = 1f)
                centerVerticallyTo(parent, bias = 1f)
            }
        }
        // We need at least the default transition to define the initial state
        defaultTransition(initialStart, initialEnd)
    },
    constraintSetName = name.toString(),
    animationSpec = tween(1200),
    modifier = Modifier.fillMaxSize()
) {
    // Switch to a random ConstraintSet on click
    Button(onClick = { name = IntRange(0, 3).random() }, Modifier.layoutId("button")) {
        Text("Hello, World!")
    }
}
```

Animations are run one after the other, if multiple are queued, only the last one will be executed. You may use `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)` to know whenever an animation is finished.

| Parameters |
|---|---|
| `motionScene: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionScene` | Holds all the layout states defined in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s and the interpolation associated between them (known as `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition`s). |
| `constraintSetName: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-string/index.html?` | The name of the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet` to animate to. Null for no animation. |
| `animationSpec: https://developer.android.com/reference/kotlin/androidx/compose/animation/core/AnimationSpec<https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html>` | Specifies how the internal progress value is animated. |
| `modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier = Modifier` | Modifier to apply to this layout node. |
| `noinline finishedAnimationListener: (() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html)? = null` | Called when an animation triggered by a change in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)` has ended. |
| `debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags = DebugFlags.None` | Flags to enable visual debugging. `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags#None()` by default. |
| `optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html = Optimizer.OPTIMIZATION_STANDARD` | Optimization parameter for the underlying ConstraintLayout, `https://developer.android.com/reference/kotlin/androidx/constraintlayout/core/widgets/Optimizer#OPTIMIZATION_STANDARD()` by default. |
| `invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy` | Provides strategies to optimize invalidations in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. Excessive invalidations will be the typical cause of bad performance in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.MotionScene,kotlin.String,androidx.compose.animation.core.AnimationSpec,androidx.compose.ui.Modifier,kotlin.Function0,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. See `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy` to learn how to apply common strategies. |
| `crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | The content to be laid out by MotionLayout, note that each layout Composable should be bound to an ID defined in the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s using `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/layoutId.modifier#(androidx.compose.ui.Modifier).layoutId(kotlin.Any)`. |

### MotionLayout

Artifact: [androidx.constraintlayout:constraintlayout-compose](https://developer.android.com/jetpack/androidx/releases/constraintlayout) [View Source](https://cs.android.com/search?q=file:androidx/constraintlayout/compose/MotionLayout.kt+function:MotionLayout)

```
@ExperimentalMotionApi
@Composable
inline fun MotionLayout(
    start: ConstraintSet,
    end: ConstraintSet,
    progress: Float,
    modifier: Modifier = Modifier,
    transition: Transition? = null,
    debugFlags: DebugFlags = DebugFlags.None,
    optimizationLevel: Int = Optimizer.OPTIMIZATION_STANDARD,
    invalidationStrategy: InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy,
    crossinline content: @Composable MotionLayoutScope.() -> Unit
): Unit
```

Layout that can animate between two different layout states described in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s.

The animation is driven by the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/package-summary#MotionLayout(androidx.constraintlayout.compose.ConstraintSet,androidx.constraintlayout.compose.ConstraintSet,kotlin.Float,androidx.compose.ui.Modifier,androidx.constraintlayout.compose.Transition,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)` value, so it will typically be a result of using an `https://developer.android.com/reference/kotlin/androidx/compose/animation/core/Animatable` or `https://developer.android.com/reference/kotlin/androidx/compose/animation/core/animateFloatAsState.composable#animateFloatAsState(kotlin.Float,androidx.compose.animation.core.AnimationSpec,kotlin.Float,kotlin.String,kotlin.Function1)`:

```kotlin
var animateToEnd by remember { mutableStateOf(false) }
MotionLayout(
    start = ConstraintSet {
        constrain(createRefFor("button")) {
            top.linkTo(parent.top)
        }
    },
    end = ConstraintSet {
        constrain(createRefFor("button")) {
            bottom.linkTo(parent.bottom)
        }
    },
    progress = animateFloatAsState(if (animateToEnd) 1f else 0f).value,
    modifier = Modifier.fillMaxSize()
) {
    Button(onClick = { animateToEnd = !animateToEnd }, Modifier.layoutId("button")) {
        Text("Hello, World!")
    }
}
```

Note that you must use `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/layoutId.modifier#(androidx.compose.ui.Modifier).layoutId(kotlin.Any)` to bind the references used in the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s to the Composable.

| Parameters |
|---|---|
| `start: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet` | ConstraintSet that defines the layout at 0f progress. |
| `end: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet` | ConstraintSet that defines the layout at 1f progress. |
| `progress: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-float/index.html` | Sets the interpolated position of the layout between the ConstraintSets. |
| `modifier: https://developer.android.com/reference/kotlin/androidx/compose/ui/Modifier = Modifier` | Modifier to apply to this layout node. |
| `transition: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/Transition? = null` | Defines the interpolation parameters between the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s to achieve fine-tuned animations. |
| `debugFlags: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags = DebugFlags.None` | Flags to enable visual debugging. `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/DebugFlags#None()` by default. |
| `optimizationLevel: https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-int/index.html = Optimizer.OPTIMIZATION_STANDARD` | Optimization parameter for the underlying ConstraintLayout, `https://developer.android.com/reference/kotlin/androidx/constraintlayout/core/widgets/Optimizer#OPTIMIZATION_STANDARD()` by default. |
| `invalidationStrategy: https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy = InvalidationStrategy.DefaultInvalidationStrategy` | Provides strategies to optimize invalidations in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.ConstraintSet,androidx.constraintlayout.compose.ConstraintSet,kotlin.Float,androidx.compose.ui.Modifier,androidx.constraintlayout.compose.Transition,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. Excessive invalidations will be the typical cause of bad performance in `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayout.composable#MotionLayout(androidx.constraintlayout.compose.ConstraintSet,androidx.constraintlayout.compose.ConstraintSet,kotlin.Float,androidx.compose.ui.Modifier,androidx.constraintlayout.compose.Transition,androidx.constraintlayout.compose.DebugFlags,kotlin.Int,androidx.constraintlayout.compose.InvalidationStrategy,kotlin.Function1)`. See `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/InvalidationStrategy` to learn how to apply common strategies. |
| `crossinline content: @https://developer.android.com/reference/kotlin/androidx/compose/runtime/Composable https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/MotionLayoutScope.() -> https://kotlinlang.org/api/core/kotlin-stdlib/kotlin/-unit/index.html` | The content to be laid out by MotionLayout, note that each layout Composable should be bound to an ID defined in the `https://developer.android.com/reference/kotlin/androidx/constraintlayout/compose/ConstraintSet`s using `https://developer.android.com/reference/kotlin/androidx/compose/ui/layout/layoutId.modifier#(androidx.compose.ui.Modifier).layoutId(kotlin.Any)`. |