We just launched Compose Examples featuring over 150+ components! Check it out →

anchoredDraggable

Common

Modifier in Compose Foundation

Enable drag gestures between a set of predefined values.

When a drag is detected, the offset of the [AnchoredDraggableState] will be updated with the drag delta. You should use this offset to move your content accordingly (see [Modifier.offset]). When the drag ends, the offset will be animated to one of the anchors and when that anchor is reached, the value of the [AnchoredDraggableState] will also be updated to the value corresponding to the new anchor.

Dragging is constrained between the minimum and maximum anchors.

Last updated:

Installation

dependencies {
   implementation("androidx.compose.foundation:foundation:1.8.0-alpha04")
}

Overloads


fun <T> Modifier.anchoredDraggable(
    state: AnchoredDraggableState<T>,
    reverseDirection: Boolean,
    orientation: Orientation,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource? = null,
    overscrollEffect: OverscrollEffect? = null,
    flingBehavior: FlingBehavior? = null
): Modifier

Parameters

namedescription
stateThe associated [AnchoredDraggableState].
reverseDirectionWhether to reverse the direction of the drag, so a top to bottom drag will behave like bottom to top, and a left to right drag will behave like right to left. If not specified, this will be determined based on [orientation] and [LocalLayoutDirection] through the other [anchoredDraggable] overload.
orientationThe orientation in which the [anchoredDraggable] can be dragged.
enabledWhether this [anchoredDraggable] is enabled and should react to the user's input.
interactionSourceOptional [MutableInteractionSource] that will passed on to the internal [Modifier.draggable].
overscrollEffectoptional effect to dispatch any excess delta or velocity to. The excess delta or velocity are a result of dragging/flinging and reaching the bounds. If you provide an [overscrollEffect], make sure to apply [androidx.compose.foundation.overscroll] to render the effect as well.
flingBehaviorOptionally configure how the anchored draggable performs the fling. By default (if passing in null), this will snap to the closest anchor considering the velocity thresholds and positional thresholds. See [AnchoredDraggableDefaults.flingBehavior].
@Deprecated(StartDragImmediatelyDeprecated)
fun <T> Modifier.anchoredDraggable(
    state: AnchoredDraggableState<T>,
    reverseDirection: Boolean,
    orientation: Orientation,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource? = null,
    overscrollEffect: OverscrollEffect? = null,
    startDragImmediately: Boolean = state.isAnimationRunning,
    flingBehavior: FlingBehavior? = null
): Modifier

Parameters

namedescription
stateThe associated [AnchoredDraggableState].
reverseDirectionWhether to reverse the direction of the drag, so a top to bottom drag will behave like bottom to top, and a left to right drag will behave like right to left. If not specified, this will be determined based on [orientation] and [LocalLayoutDirection] through the other [anchoredDraggable] overload.
orientationThe orientation in which the [anchoredDraggable] can be dragged.
enabledWhether this [anchoredDraggable] is enabled and should react to the user's input.
interactionSourceOptional [MutableInteractionSource] that will passed on to the internal [Modifier.draggable].
overscrollEffectoptional effect to dispatch any excess delta or velocity to. The excess delta or velocity are a result of dragging/flinging and reaching the bounds. If you provide an [overscrollEffect], make sure to apply [androidx.compose.foundation.overscroll] to render the effect as well.
startDragImmediatelywhen set to false, [draggable] will start dragging only when the gesture crosses the touchSlop. This is useful to prevent users from "catching" an animating widget when pressing on it. See [draggable] to learn more about startDragImmediately.
flingBehaviorOptionally configure how the anchored draggable performs the fling. By default (if passing in null), this will snap to the closest anchor considering the velocity thresholds and positional thresholds. See [AnchoredDraggableDefaults.flingBehavior].

fun <T> Modifier.anchoredDraggable(
    state: AnchoredDraggableState<T>,
    orientation: Orientation,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource? = null,
    overscrollEffect: OverscrollEffect? = null,
    flingBehavior: FlingBehavior? = null
): Modifier

Parameters

namedescription
stateThe associated [AnchoredDraggableState].
orientationThe orientation in which the [anchoredDraggable] can be dragged.
enabledWhether this [anchoredDraggable] is enabled and should react to the user's input.
interactionSourceOptional [MutableInteractionSource] that will passed on to the internal [Modifier.draggable].
overscrollEffectoptional effect to dispatch any excess delta or velocity to. The excess delta or velocity are a result of dragging/flinging and reaching the bounds. If you provide an [overscrollEffect], make sure to apply [androidx.compose.foundation.overscroll] to render the effect as well.
flingBehaviorOptionally configure how the anchored draggable performs the fling. By default (if passing in null), this will snap to the closest anchor considering the velocity thresholds and positional thresholds. See [AnchoredDraggableDefaults.flingBehavior].
@Deprecated(StartDragImmediatelyDeprecated)
fun <T> Modifier.anchoredDraggable(
    state: AnchoredDraggableState<T>,
    orientation: Orientation,
    enabled: Boolean = true,
    interactionSource: MutableInteractionSource? = null,
    overscrollEffect: OverscrollEffect? = null,
    startDragImmediately: Boolean = state.isAnimationRunning,
    flingBehavior: FlingBehavior? = null
): Modifier

Parameters

namedescription
stateThe associated [AnchoredDraggableState].
orientationThe orientation in which the [anchoredDraggable] can be dragged.
enabledWhether this [anchoredDraggable] is enabled and should react to the user's input.
interactionSourceOptional [MutableInteractionSource] that will passed on to the internal [Modifier.draggable].
overscrollEffectoptional effect to dispatch any excess delta or velocity to. The excess delta or velocity are a result of dragging/flinging and reaching the bounds. If you provide an [overscrollEffect], make sure to apply [androidx.compose.foundation.overscroll] to render the effect as well.
startDragImmediatelywhen set to false, [draggable] will start dragging only when the gesture crosses the touchSlop. This is useful to prevent users from "catching" an animating widget when pressing on it. See [draggable] to learn more about startDragImmediately.
flingBehaviorOptionally configure how the anchored draggable performs the fling. By default (if passing in null), this will snap to the closest anchor considering the velocity thresholds and positional thresholds. See [AnchoredDraggableDefaults.flingBehavior].
by @alexstyl