Метод draggable
Метод draggable интерфейса
Modifier
следит за перетаскиванием по горизонтали или вертикали.
Смещение приходит в колбэк состояния
DraggableState.
Ось задаёт Orientation.
Синтаксис
Modifier.draggable(
orientation = Orientation.Horizontal,
state = draggableState,
)
Параметры
| Параметр | Описание |
|---|---|
orientation |
Orientation.Horizontal или
Orientation.Vertical.
|
state |
Состояние перетаскивания. Создают через
rememberDraggableState с обработчиком delta.
|
enabled |
Отключает жест перетаскивания. |
Пример
Давайте сдвинем текст по горизонтали:
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.foundation.background
import androidx.compose.foundation.gestures.Orientation
import androidx.compose.foundation.gestures.draggable
import androidx.compose.foundation.gestures.rememberDraggableState
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.Text
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
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
class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
var offsetX by remember { mutableFloatStateOf(0f) }
val dragState = rememberDraggableState { delta ->
offsetX += delta
}
Text(
text = "abcde",
modifier = Modifier
.offset { IntOffset(offsetX.roundToInt(), 0) }
.draggable(
orientation = Orientation.Horizontal,
state = dragState,
)
.background(Color.LightGray)
.padding(16.dp),
)
}
}
}
На экране серую плашку можно тянуть влево и вправо, текст сдвигается за пальцем.
Смотрите также
-
метод
anchoredDraggable,
перетаскивание с якорями -
метод
pointerInput,
своя логика жестов -
метод
offset,
фиксированный сдвиг без жеста -
метод
clickable,
короткое нажатие без перетаскивания