0

我正在使用此答案中的以下代码将我的可组合函数绘制到画布上,该画布又将图像保存到工作正常的用户手机,直到我在可组合中使用rememberImagePainter并且Image在应用程序时不给我任何错误消息崩溃。

val bounds = capturingViewBounds ?: return@clickable
bitmap = Bitmap.createBitmap(
    bounds.width.roundToInt(), bounds.height.roundToInt(),
    Bitmap.Config.ARGB_8888
).applyCanvas {
    translate(-bounds.left, -bounds.top)
    view.draw(this)
}

我正在将 Web 上的 PNG 图像直接加载到这个基于 if 语句的可组合图像中。如果我在图像上使用我的文件夹中的普通可绘制对象,则没有问题,似乎只是当我从网络加载图像时它崩溃了

Image(
    modifier = Modifier
        .align(Alignment.CenterHorizontally)
        .size(48.dp),
    painter = if (player.playerImageUrl.isNotBlank()) {
        rememberImagePainter(data = player.playerImageUrl)
    } else {
        painterResource(
            id = setKitColour(kitColour)
        )
    },
    contentDescription = null
)
private fun setKitColour(color: String): Int {
    return when (color) {
        "Red" -> R.drawable.ic_shirt_red
        "Blue" -> R.drawable.ic_shirt_blue
        "Green" -> R.drawable.ic_shirt_green
        "Yellow" -> R.drawable.ic_shirt_yellow
        "White" -> R.drawable.ic_shirt_white
        else -> R.drawable.ic_shirt_black
    }
}

在此处输入图像描述

4

1 回答 1

2

应用程序崩溃时不给我任何错误消息

情况并非如此,至少在我的情况下,我遇到了以下异常:

java.lang.IllegalArgumentException:软件渲染不支持硬件位图

这是Coil中的一个已知问题allowHardware(false),可以通过指定:

Image(
    rememberImagePainter(
        data = player.playerImageUrl,
        builder = {
            allowHardware(false)
        }
    ),
    contentDescription = "..."
)
于 2021-10-16T08:40:37.040 回答