Как обращаться с горизонтальным жестом прокрутки в сочетании с жестами преобразования в JetPack ComposeAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Как обращаться с горизонтальным жестом прокрутки в сочетании с жестами преобразования в JetPack Compose

Сообщение Anonymous »

Привет, я хочу иметь масштабируемое изображение в горизонтальном пейджере. Я уже реализовал жесты преобразования и двойной нажатие, но теперь я не могу прокрутить свой пейджер с прокруткой по изображению. Я думаю, панорамирование и прокрутка смешивают друг друга. Можете ли вы помочь мне в этом? >
< /ul>
Это мое увеличение изображения, композитное < /strong>: < /p>

@Composable
fun DoubleTapZoom(
) {
var zoomed by remember { mutableStateOf(false) }
var transforming by remember { mutableStateOf(false) }
var offset by remember { mutableStateOf(Offset.Zero) }
var zoomFloat by remember { mutableStateOf(1f) }
var angle by remember { mutableStateOf(0f) }

Image(
painter = painterResource(id = R.drawable.ic_launcher_foreground),
contentDescription = null,
modifier = Modifier
.size(500.dp)
.background(Color.Red)
.pointerInput(Unit) {

detectTapGestures(
onDoubleTap = { tapOffset ->
offset = if (zoomed) Offset.Zero else
calculateOffsetFromClick(size, tapOffset)
zoomed = !zoomed
}
)
}
.pointerInput(Unit) {

detectTransformGestures { centroid, pan, gestureZoom, gestureRotate ->
transforming = true
val oldScale = zoomFloat
val newScale = zoomFloat * gestureZoom

offset = (offset + centroid / oldScale).rotateBy(gestureRotate) -
(centroid / newScale + pan / oldScale)
zoomFloat = newScale
angle += gestureRotate
transforming = false
}
}
.graphicsLayer {
scaleX = zoomFloat
scaleY = zoomFloat
translationX = -offset.x * zoomFloat
translationY = -offset.y * zoomFloat
rotationZ = angle
transformOrigin = TransformOrigin(0f, 0f)
}
)
}

и вот мое использование в горизонтальном пейджере:


@OptIn(ExperimentalFoundationApi::class)
@Composable
fun HorizontalPagerWithZoomableContent() {
val pagerState = rememberPagerState()

HorizontalPager(
state = pagerState,
modifier = Modifier
.border(4.dp, Color.Red, RoundedCornerShape(36.dp))
.clip(RoundedCornerShape(36.dp)),
pageCount = 4,
) { pageIndex ->
Box (modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center){

DoubleTapZoom()
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/763 ... es-in-jetp
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»