【问题标题】:Jetpack Compose not capturing rememberImagePainter in screenshotJetpack Compose 未在屏幕截图中捕获 rememberImagePainter
【发布时间】:2021-10-16 08:14:38
【问题描述】:

我正在使用this answer 中的以下代码将我的可组合函数绘制到画布上,然后将图像保存到工作正常的用户手机,直到我在我的Image 可组合中使用rememberImagePainter 并且没有'当应用崩溃时不要给我任何错误信息。

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
    }
}

【问题讨论】:

    标签: android android-jetpack-compose coil


    【解决方案1】:

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

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

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

    这是 Coil 中的 known problem,可以通过指定 allowHardware(false) 来修复:

    Image(
        rememberImagePainter(
            data = player.playerImageUrl,
            builder = {
                allowHardware(false)
            }
        ),
        contentDescription = "..."
    )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多