Метод anchoredDraggable
Метод anchoredDraggable интерфейса
Modifier
использует AnchoredDraggableState
и карту якорей DraggableAnchors.
После отпускания элемент двигается
к ближайшему якорю по выбранной оси.
Синтаксис
Modifier.anchoredDraggable(
state = anchoredState,
orientation = Orientation.Horizontal,
)
Параметры
| Параметр | Описание |
|---|---|
state |
AnchoredDraggableState с начальным значением
и якорями позиций.
|
orientation |
Ось перетаскивания: горизонталь или вертикаль. |
enabled |
Включает или отключает жест. |
Пример
Давайте перетащим плашку между двумя положениями:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.AnchoredDraggableState
import androidx.compose.foundation.gestures.DraggableAnchors
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.anchoredDraggable
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.material3.Text
import androidx.compose.runtime.remember
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import kotlin.math.roundToInt
enum class PanelPos { Start, End }
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
val anchors = DraggableAnchors {
PanelPos.Start at 0f
PanelPos.End at 200f
}
val state = remember {
AnchoredDraggableState(
initialValue = PanelPos.Start,
anchors = anchors,
)
}
Box(modifier = Modifier.fillMaxSize()) {
Text(
text = "abcde",
modifier = Modifier
.offset {
IntOffset(state.requireOffset().roundToInt(), 0)
}
.anchoredDraggable(
state = state,
orientation = Orientation.Horizontal,
)
.size(120.dp, 48.dp)
.background(Color.LightGray)
.padding(12.dp),
)
}
}
}
}
На экране плашку можно тянуть вправо, после отпускания она прилипнет к ближайшему якорю.
Смотрите также
-
метод
draggable,
свободное перетаскивание без якорей -
метод
pointerInput,
кастомные жесты -
метод
offset,
сдвиг без анимации якорей -
функция
Box,
область для перетаскиваемого блока