图片功能从资源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
的参数?
答案 0 :(得分:1)
我不确定您的情况,您需要使用Drawable
而不是给定的API。
但是我们可以使用以下方式实现。 Modifier.paint
只需要一个Painter
对象,我们就可以使用ImagePainter
和VectorPainter
来创建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()
)
)
)
}