Jetpack Compose实现放大镜效果竟如此简单

例子说明

在一个Box中,显示图片并支持放大镜功能。

代码

直接上代码

var offset by remember {
    mutableStateOf(Offset.Zero)
}
Box(
    modifier = Modifier
        .fillMaxWidth()
        .wrapContentHeight()
        .pointerInput(true) {
            detectDragGestures { change, _ ->
                // 跟踪手指在屏幕的位置
                offset = change.position
            }
        }
        .magnifier(
            // 源图片中心位置
            sourceCenter = { offset },
            // 放大镜中心位置,为了错开手指,加上y轴偏移量
            magnifierCenter = { offset - Offset(0f, 200f) },
            // 样式,这个样式展示了圆形的放大镜,可按设计要求调整
            style = MagnifierStyle(
                size = DpSize(100.dp, 100.dp),
                cornerRadius = 100.dp
            )
        )
) {
    Image(
        modifier = Modifier.fillMaxWidth(),
        contentScale = ContentScale.FillWidth,
        painter = painterResource(id = R.drawable.source_code),
        contentDescription = null
    )
}

以上代码很简单,没有什么好解释的。


效果如下: