Создаем портфолио за 1 месяц
К концу месяца: 4 классных проекта в вашем портфолио! Стоимость: 100$. Подробности...
34 of 502 menu
◀ ▶

Метод 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,
    область для перетаскиваемого блока
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить