Как изменить параметр @DrawableRes на Drawable в функции @Compose?
Функция изображения выводит изображение из идентификатора ресурса; нравиться
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
?
1 ответ
Решение
Я не уверен в вашем сценарии, в котором вы нуждаетесь
Drawable
вместо данного API.
Но добиться этого можно следующим образом.
Modifier.paint
нужен только
Painter
Object, 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()
)
)
)
}