如何在@Compose 函数中将@DrawableRes 参数更改为Drawable?

How to change @DrawableRes parameter to Drawable in @Compose function?

图片函数根据资源id绘制图片;像 R.drawable.icon.

   @Composable
    fun Picture(@DrawableRes resId: Int, modifier: Modifier = Modifier) {
        val rectModifier = loadVectorResource(resId).resource.resource
                ?.let { asset ->
                    modifier.paint(
                            painter = VectorPainter(asset)
                    )
                }
                ?: modifier
        Box(modifier = rectModifier)
    }

我该如何更改它,使其使用 Drawable 参数而不是 @DrawableRes

我不确定你的场景,你需要 Drawable 而不是给定的 API。

但是我们可以通过下面的方式实现。 Modifier.paint 只需要一个 Painter 对象,我们可以使用 ImagePainterVectorPainter.

创建 Painter

在我们的例子中,我们想要使用Drawable,所以我们可以使用ImagePainter,它需要ImageAsset,所以我们可以使用Bitmap来创建ImageAsset

所以最终结果会是这样的:

@Composable
fun Picture(@DrawableRes resId: Int, modifier: Modifier = Modifier) {
    val resources = ResourcesCompat.getDrawable(ContextAmbient.current.resources, resId, null)
    resources?.let {
        Picture(drawable = it, modifier = modifier)
    }
}

@Composable
fun Picture(drawable: Drawable, modifier: Modifier = Modifier) {
    Box(
        modifier = modifier.paint(
            ImagePainter(
                drawable.toBitmap().asImageAsset()
            )
        )
    )
}