You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android Compose:先裁图片边框再适配屏幕宽度的实现问题

解决方案

你的问题核心是裁剪时机错误:当前代码是等图片拉伸到屏幕宽度后才裁剪1px,但原图的1px边框被拉伸后实际像素远大于1px,所以裁剪根本没去掉边框。正确做法是先裁剪原始图片的边框,再进行拉伸。

用Coil的图片变换(Transformation)在加载阶段就处理原始Bitmap,代码如下:

Image(
    painter = rememberImagePainter(
        data = URL,
        builder = {
            error(R.drawable.img)
            // 添加自定义变换,先裁剪原图的1px边框
            transform(object : BitmapTransformation() {
                override fun transform(pool: BitmapPool, input: Bitmap): Bitmap {
                    // 裁剪掉四周各1px,注意判断原图尺寸是否大于2x2,避免报错
                    if (input.width <= 2 || input.height <= 2) {
                        return input
                    }
                    return Bitmap.createBitmap(
                        input,
                        1, // 左偏移1px
                        1, // 上偏移1px
                        input.width - 2, // 宽度减去左右各1px
                        input.height - 2 // 高度减去上下各1px
                    )
                }

                override fun key(): String = "crop1pxBorder" // 唯一标识变换,用于缓存
            })
        }
    ),
    contentDescription = null,
    modifier = Modifier.fillMaxWidth()
)

代码说明

  • 在Coil的图片加载构建器中添加transform,直接对原始Bitmap进行裁剪操作,去掉四周各1px的边框。
  • 增加了尺寸判断,防止原图过小(比如小于2x2)时裁剪报错。
  • 裁剪后的图片再通过fillMaxWidth()适配屏幕宽度,此时已经没有原始边框,不会出现残留问题。

内容的提问来源于stack exchange,提问作者Alexander Zhurkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 22:52:04