From 3f582e12c03fe4924d0108010e9ba4c4173576c8 Mon Sep 17 00:00:00 2001 From: Pierre-Yves Nicolas <6371790+pynicolas@users.noreply.github.com> Date: Wed, 25 Jun 2025 22:14:33 +0200 Subject: [PATCH] Fix destination of animation for the first element --- .../org/mydomain/myscan/view/CameraScreen.kt | 4 ++-- .../java/org/mydomain/myscan/view/PageList.kt | 21 +++++++++++++++---- 2 files changed, 19 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt b/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt index f5897b5..7030d04 100644 --- a/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt +++ b/app/src/main/java/org/mydomain/myscan/view/CameraScreen.kt @@ -131,7 +131,7 @@ fun CameraScreen( onPageClick = { index -> viewModel.navigateTo(Screen.FinalizeDocument(index)) }, listState = listState, onLastItemPosition = - { coords -> thumbnailCoords.value = coords.localToWindow(Offset.Zero) } + { offset -> thumbnailCoords.value = offset } ) }, cameraUiState = CameraUiState(pageIds.size, liveAnalysisState, captureState), @@ -223,7 +223,7 @@ private fun CapturedImage(cameraUiState: CameraUiState, thumbnailCoords: Mutable val centerX = bounds.left + bounds.width / 2 val centerY = bounds.top + bounds.height / 2 with(density) { - targetOffsetX = thumbnailCoords.value.x - centerX + PAGE_LIST_ELEMENT_SIZE_DP.dp.toPx() + targetOffsetX = thumbnailCoords.value.x - centerX targetOffsetY = thumbnailCoords.value.y - centerY + justABitToTheTop.toPx() } } diff --git a/app/src/main/java/org/mydomain/myscan/view/PageList.kt b/app/src/main/java/org/mydomain/myscan/view/PageList.kt index a0d6eab..9cdce44 100644 --- a/app/src/main/java/org/mydomain/myscan/view/PageList.kt +++ b/app/src/main/java/org/mydomain/myscan/view/PageList.kt @@ -34,10 +34,11 @@ import androidx.compose.material3.MaterialTheme import androidx.compose.runtime.Composable import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier +import androidx.compose.ui.geometry.Offset import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.asImageBitmap -import androidx.compose.ui.layout.LayoutCoordinates import androidx.compose.ui.layout.onGloballyPositioned +import androidx.compose.ui.platform.LocalDensity import androidx.compose.ui.unit.dp const val PAGE_LIST_ELEMENT_SIZE_DP = 120 @@ -49,7 +50,7 @@ fun CommonPageList( onPageClick: (Int) -> Unit, listState: LazyListState = rememberLazyListState(), currentPageIndex: Int? = null, - onLastItemPosition: ((LayoutCoordinates) -> Unit)? = null, + onLastItemPosition: ((Offset) -> Unit)? = null, ) { LazyRow ( state = listState, @@ -77,7 +78,14 @@ fun CommonPageList( Modifier.width(maxImageSize) val isLastItem = index == pageIds.lastIndex if (isLastItem && onLastItemPosition != null) { - modifier = modifier.onGloballyPositioned(onLastItemPosition) + val density = LocalDensity.current + modifier = modifier.onGloballyPositioned() + { coordinates -> + with(density) { + onLastItemPosition(coordinates.localToWindow( + Offset(x = PAGE_LIST_ELEMENT_SIZE_DP.dp.toPx(), y = 0f))) + } + } } Image( bitmap = bitmap, @@ -91,6 +99,11 @@ fun CommonPageList( } } if (pageIds.isEmpty()) { - Box(modifier = Modifier.height(120.dp)) {} + var modifier = Modifier.height(120.dp) + if (onLastItemPosition != null) { + modifier = modifier.onGloballyPositioned() + { coordinates -> onLastItemPosition(coordinates.localToWindow(Offset.Zero)) } + } + Box(modifier = modifier) {} } }