Как установить ограничения для панорамирования с помощью макета с горизонтальной и вертикальной прокруткой, который можн ⇐ Android
Как установить ограничения для панорамирования с помощью макета с горизонтальной и вертикальной прокруткой, который можн
Итак, мне нужен макет, который должен иметь возможность свободной прокрутки (т. е. прокрутки по горизонтали и вертикали) и масштабирования (в частности, уменьшения масштаба).
Для этого я реализовал что-то вроде этого:
var смещение по памяти {mutableStateOf(Offset.Zero) } вар масштабирование, запомнив {mutableFloatStateOf(1f)} Столбец( модификатор = Модификатор .verticalScroll(rememberScrollState(), включен = false) .horizontalScroll(rememberScrollState(), включен = false) .pointerInput(Единица измерения) { обнаружитьTransformGestures( onGesture = { центроид, панорама, жестZoom, жестRotate -> val oldScale = масштабирование val newScale = масштабирование * жестZoom смещение = (смещение + центроид/oldScale) - (центроид/newScale + панорамирование/oldScale) масштаб = новыйМасштаб } ) } .graphicsLayer { переводX = -offset.x * масштабирование TranslationY = -offset.y * масштабирование масштабX = масштабирование масштабY = масштабирование TransformOrigin = TransformOrigin(0f, 0f) }, вертикальныйArrangement = Arrangement.spacedBy(16.dp) ) { повторить(40) {столбец -> Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { повторить(40) {строка -> Коробка(модификатор = Модификатор) { Текст( модификатор = Модификатор .align(Выравнивание.Центр), текст = "($строка, $столбец)", textAlign = TextAlign.Центр ) } } } } } Но проблема в том, что при перетаскивании контент выходит далеко за пределы экрана? Как я могу убедиться, что содержимое остается внутри границ при уменьшении и перетаскивании?
Итак, мне нужен макет, который должен иметь возможность свободной прокрутки (т. е. прокрутки по горизонтали и вертикали) и масштабирования (в частности, уменьшения масштаба).
Для этого я реализовал что-то вроде этого:
var смещение по памяти {mutableStateOf(Offset.Zero) } вар масштабирование, запомнив {mutableFloatStateOf(1f)} Столбец( модификатор = Модификатор .verticalScroll(rememberScrollState(), включен = false) .horizontalScroll(rememberScrollState(), включен = false) .pointerInput(Единица измерения) { обнаружитьTransformGestures( onGesture = { центроид, панорама, жестZoom, жестRotate -> val oldScale = масштабирование val newScale = масштабирование * жестZoom смещение = (смещение + центроид/oldScale) - (центроид/newScale + панорамирование/oldScale) масштаб = новыйМасштаб } ) } .graphicsLayer { переводX = -offset.x * масштабирование TranslationY = -offset.y * масштабирование масштабX = масштабирование масштабY = масштабирование TransformOrigin = TransformOrigin(0f, 0f) }, вертикальныйArrangement = Arrangement.spacedBy(16.dp) ) { повторить(40) {столбец -> Row(horizontalArrangement = Arrangement.spacedBy(16.dp)) { повторить(40) {строка -> Коробка(модификатор = Модификатор) { Текст( модификатор = Модификатор .align(Выравнивание.Центр), текст = "($строка, $столбец)", textAlign = TextAlign.Центр ) } } } } } Но проблема в том, что при перетаскивании контент выходит далеко за пределы экрана? Как я могу убедиться, что содержимое остается внутри границ при уменьшении и перетаскивании?
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение