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

Метод dispatchRawDelta

Метод dispatchRawDelta класса DraggableState принимает смещение по оси перетаскивания. Его вызывает модификатор draggable или ваш код, если delta приходит из другого источника. Колбэк rememberDraggableState получает тот же delta после dispatch.

Синтаксис

dragState.dispatchRawDelta(delta)

Параметры

Параметр Описание
delta Смещение в пикселях вдоль оси draggable. Положительное и отрицательное направление зависит от Orientation.

Пример

Давайте сдвинем плашку draggable и накопим offset в колбэке:

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), ) } } }

На экране при перетаскивании draggable внутри state вызовется dispatchRawDelta, и плашка сдвинется.

Пример

Давайте вручную подадим delta через dispatchRawDelta:

import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.offset import androidx.compose.material3.Button 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.foundation.gestures.rememberDraggableState import androidx.compose.ui.Modifier import androidx.compose.ui.unit.IntOffset 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 } Column { Text( text = "12345", modifier = Modifier.offset { IntOffset(offsetX.roundToInt(), 0) }, ) Button( onClick = { dragState.dispatchRawDelta(40f) }, ) { Text(text = "abcde") } } } } }

На экране по нажатию на кнопку текст "12345" сдвинется вправо на фиксированный шаг.

Смотрите также

  • класс DraggableState,
    у которого вызывают dispatchRawDelta
  • функция rememberDraggableState,
    которая создаёт state с колбэком delta
  • метод draggable,
    который сам вызывает dispatch при жесте
  • метод detectDragGestures,
    откуда delta можно передать в state вручную
← →
↑
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить