Я пытаюсь активировать функции, пока пользователь проводит по ячейкам сетки.
Однако функции запускаются в случайных позициях, даже за пределами сетки.
Что мне нужно изменить, чтобы исправить?
@Composable
fun SwipeDetectGrid() {
var childFrames by remember { mutableStateOf(emptyMap()) }
var currentOverChild by remember { mutableStateOf(null) }
fun updateOverChild(globalOffset: Offset) {
val overChild = childFrames.entries.firstOrNull { (_, rect) ->
rect.contains(globalOffset)
}?.key
currentOverChild = overChild
}
Box(
modifier = Modifier
.fillMaxSize()
.background(Color(0xFFEFEFEF))
.pointerInput(Unit) {
detectDragGestures(
onDragStart = { offset -> updateOverChild(offset) },
onDrag = { change, _ -> updateOverChild(change.position) },
onDragEnd = { currentOverChild = null },
onDragCancel = { currentOverChild = null }
)
}
) {
Column(
modifier = Modifier
.fillMaxHeight()
.padding(16.dp)
) {
for (row in 0..2) {
Row(
modifier = Modifier.fillMaxWidth()
) {
for (col in 0..2) {
val index = row * 3 + col
Child(
index, { i, rect ->
childFrames = childFrames + (i to rect)
},
modifier = Modifier
.weight(1f)
.aspectRatio(1f)
)
}
}
}
}
currentOverChild?.let { id ->
Text(
text = "Over: Item $id",
color = Color.White,
modifier = Modifier
.background(Color.Black)
.padding(8.dp)
.align(androidx.compose.ui.Alignment.TopCenter)
)
}
}
}
@Composable
fun Child(i: Int, updateChildFrames: (Int, Rect) -> Unit, modifier: Modifier) {
Box(
modifier = modifier
.background(Color.Cyan)
.onGloballyPositioned { coordinates ->
val rect = coordinates.boundsInRoot()
updateChildFrames(i, rect)
},
contentAlignment = Alignment.Center
) {
Text(
text = "Item $i",
modifier = Modifier.padding(8.dp)
)
}
}
Подробнее здесь: https://stackoverflow.com/questions/798 ... positioned
Невозможно получить текущую позицию в сетке с помощью onGloballyPositioned. ⇐ Android
Форум для тех, кто программирует под Android
1764524253
Anonymous
Я пытаюсь активировать функции, пока пользователь проводит по ячейкам сетки.
Однако функции запускаются в случайных позициях, даже за пределами сетки.
Что мне нужно изменить, чтобы исправить?
@Composable
fun SwipeDetectGrid() {
var childFrames by remember { mutableStateOf(emptyMap()) }
var currentOverChild by remember { mutableStateOf(null) }
fun updateOverChild(globalOffset: Offset) {
val overChild = childFrames.entries.firstOrNull { (_, rect) ->
rect.contains(globalOffset)
}?.key
currentOverChild = overChild
}
Box(
modifier = Modifier
.fillMaxSize()
.background(Color(0xFFEFEFEF))
.pointerInput(Unit) {
detectDragGestures(
onDragStart = { offset -> updateOverChild(offset) },
onDrag = { change, _ -> updateOverChild(change.position) },
onDragEnd = { currentOverChild = null },
onDragCancel = { currentOverChild = null }
)
}
) {
Column(
modifier = Modifier
.fillMaxHeight()
.padding(16.dp)
) {
for (row in 0..2) {
Row(
modifier = Modifier.fillMaxWidth()
) {
for (col in 0..2) {
val index = row * 3 + col
Child(
index, { i, rect ->
childFrames = childFrames + (i to rect)
},
modifier = Modifier
.weight(1f)
.aspectRatio(1f)
)
}
}
}
}
currentOverChild?.let { id ->
Text(
text = "Over: Item $id",
color = Color.White,
modifier = Modifier
.background(Color.Black)
.padding(8.dp)
.align(androidx.compose.ui.Alignment.TopCenter)
)
}
}
}
@Composable
fun Child(i: Int, updateChildFrames: (Int, Rect) -> Unit, modifier: Modifier) {
Box(
modifier = modifier
.background(Color.Cyan)
.onGloballyPositioned { coordinates ->
val rect = coordinates.boundsInRoot()
updateChildFrames(i, rect)
},
contentAlignment = Alignment.Center
) {
Text(
text = "Item $i",
modifier = Modifier.padding(8.dp)
)
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79834082/cannot-get-the-current-swiped-position-in-grid-with-ongloballypositioned[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия