我想在 compose 中为图像设置一个可绘制的形状,可绘制看起来像这样 curved_rect.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="#FBCCBD" />
<corners android:radius="8dp" />
</shape>
我尝试使用下面的 snipet 加载形状
Image(painter = painterResource(id = R.drawable.cureved_rect),
contentDescription = null,
modifier = Modifier
.padding(32.dp)
.fillMaxWidth()
.height(200.dp)
.constrainAs(image) {
top.linkTo(parent.top)
start.linkTo(parent.start)
end.linkTo(parent.end)
})
但它不起作用,应用程序崩溃并出现异常java.lang.IllegalArgumentException:仅支持 VectorDrawables 和光栅化资产类型,例如 PNG、JPG 1 .如何在撰写中加载可绘制的形状 2 .加载合成图像中的颜色资源
答案 0 :(得分:2)
最好的解决方案是使用 Compose 提供的 Shape
。
类似的东西:
Box(
modifier = Modifier.size(200.dp)
.background(Color(0xFFFBCCBD), shape = RoundedCornerShape(16.dp))
)
否则,如果您想使用可绘制资源,您可以使用 coil-compose
版本:
类似于:
Image(
rememberImagePainter( ContextCompat.getDrawable(context,R.drawable.shape)),
contentDescription = "Background",
modifier = Modifier.size(200.dp)
)
答案 1 :(得分:1)
这是一种解决方法,而不是使用 Image 可组合函数, 您可以使用 AndroidView,因此您的代码将类似于:
AndroidView(factory = {
val view = LayoutInflater.from(it).inflate(R.layout.temp_layout, null, false)
view
},
modifier = Modifier
.padding(32.dp)
.fillMaxWidth()
.height(200.dp)
.constrainAs(image) {
top.linkTo(parent.top)
start.linkTo(parent.start)
end.linkTo(parent.end)
})
您将添加这样的临时布局
temp_layout.xml
<?xml version="1.0" encoding="utf-8"?>
<ImageView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:background="@drawable/cureved_rect"
android:layout_height="match_parent">
</ImageView>