0

图片函数从资源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

4

1 回答 1

1

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

但是我们可以使用下面的方式来实现。Modifier.paint只需要一个PainterObject,Painter 我们可以使用ImagePainter和来创建VectorPainter

在我们的例子中,我们想使用 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()
            )
        )
    )
}
于 2020-10-20T17:12:22.657 回答