Fix destination of animation for the first element

This commit is contained in:
Pierre-Yves Nicolas
2025-06-25 22:14:33 +02:00
parent 5cfe6244d3
commit 3f582e12c0
2 changed files with 19 additions and 6 deletions

View File

@@ -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()
}
}

View File

@@ -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) {}
}
}