如何解决如何在@Compose函数中将@DrawableRes参数更改为Drawable?
图片功能从资源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
对象,我们就可以使用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()
)
)
)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。