android 如何使用Jetpack Compose在我的屏幕上绘制9个补丁(.9.png)?

prdp8dxp  于 2023-01-19  发布在  Android
关注(0)|答案(4)|浏览(315)

我尝试在图像合成中使用.9.png文件,如:

Image(
            painter = painterResource(id = R.drawable.shadow_faq),
            contentDescription = "Faq card 1",
            modifier = Modifier
                .constrainAs(imgGeneral) {
                    top.linkTo(glImgGeneralTop)
                    bottom.linkTo(glImgBottom)
                    start.linkTo(glImgLeft)
                    end.linkTo(glImgRight)
                    height = Dimension.fillToConstraints
                    width = Dimension.fillToConstraints
                }
        )

但是在执行此操作时,我遇到了一个渲染问题,显示为java.lang.IllegalArgumentException: Only VectorDrawables and rasterized asset types are supported ex. PNG, JPG
如何在Jetpack合成中使用.9.png文件?

qni6mghb

qni6mghb1#

有时候,我们会加载9.png作为视图的背景,就像聊天应用中的消息项一样。我们可以这样做:
首先,我们加载9.png作为可绘制对象:

val bgImg = ContextCompat.getDrawable(
    LocalContext.current,
    if (isFromMe) R.drawable.chat_message_right else R.drawable.chat_message_left
)

其次,我们可以使用Modifier#drawBehind()方法来设置背景:

Text(text = "This my message",
    modifier = Modifier
        .drawBehind {
            bgImg?.updateBounds(0, 0, size.width.toInt(), size.height.toInt())
            bgImg?.draw(drawContext.canvas.nativeCanvas)
        }
        .padding(8.dp)
)

最后,你会得到你想要的效果。

yeotifhr

yeotifhr2#

更新:从1.0.0-rc02和伴奏0.14.0开始,您可以使用coil-compose版本:

Image(
    rememberImagePainter(ContextCompat.getDrawable(context,R.drawable.xxx)),
    contentDescription = "Faq card 1",
)

以前不推荐的答案

您可以使用Companist中的DrawablePainter,它返回一个Painter,绘制一个Android Drawable

Image(
    rememberDrawablePainter(drawable = ContextCompat.getDrawable(context,R.drawable.xxxx) ),
    contentDescription = "Faq card 1"
)
qxgroojn

qxgroojn3#

**已编辑:**请使用Gabriele答案。

我尝试了Gabriele解决方案,但当我设置100x200这样的特定大小时,它对我不起作用。
我的解决办法是...

val context = LocalContext.current
val (w, h) = with(LocalDensity.current) {
    200.dp.roundToPx() to 100.dp.roundToPx()
}
val image = remember {
    ContextCompat.getDrawable(context, R.drawable.balao)?.toBitmap(w, h)?.asImageBitmap()!!
}
Image(image, contentDescription = null)
kokeuurv

kokeuurv4#

您可以使用AndroidView并通过旧的良好ImageView

AndroidView(
    modifier = Modifier.xxx,
    factory = {
        ImageView(it)
    }
)
{
    it.setImageResource(R.drawable.shadow_faq)
}

相关问题