@Composable
fun ImageBrowserItem(path: String) {
var scale by remember { mutableStateOf(1f) }
var offset by remember { mutableStateOf(Offset.Zero) }
var state = rememberTransformableState { zoomChange, panChange, rotationChange ->
scale *= zoomChange
scale = scale.coerceIn(1f, 5f)
offset += panChange
}
Surface(
modifier = Modifier.fillMaxSize(),
color = Color.Black
) {
AsyncImage(
model = path,
contentDescription = "",
contentScale = ContentScale.Fit,
modifier = Modifier
.transformable(state = state)
.graphicsLayer(
scaleX = scale,
scaleY = scale,
translationX = offset.x,
translationY = offset.y
)
.pointerInput(Unit) {
detectTapGestures(
onDoubleTap = {
scale = if (scale <= 1f) 2f else 1f
offset = Offset.Zero
}
)
detectDragGestures(
onDragStart = { offset = Offset.Zero },
onDrag = { change, _ -> offset += change.positionChange() }
)
}
)
}
}