d-f*_*erx 13 android-drawable android-jetpack-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>
Run Code Online (Sandbox Code Playgroud)
我尝试使用下面的片段来加载形状
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)
})
Run Code Online (Sandbox Code Playgroud)
但它不起作用,应用程序崩溃并出现异常java.lang.IllegalArgumentException:Only VectorDrawables 和光栅化资源类型受支持,例如 PNG,JPG 1 。如何在 compose 2 中加载可绘制形状。在合成图像中加载颜色资源
Gab*_*tti 14
最好的解决方案是使用ShapeCompose 提供的。
就像是:
Box(
modifier = Modifier
.size(200.dp)
.background(Color(0xFFFBCCBD), shape = RoundedCornerShape(16.dp))
)
Run Code Online (Sandbox Code Playgroud)
否则,如果您想使用可绘制资源,您可以使用以下coil-compose版本:
就像是:
Image(
rememberImagePainter( ContextCompat.getDrawable(context,R.drawable.shape)),
contentDescription = "Background",
modifier = Modifier.size(200.dp)
)
Run Code Online (Sandbox Code Playgroud)
这是一种解决方法,您可以使用AndroidView ,而不是使用Image可组合函数,因此您的代码将类似于以下内容:
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)
})
Run Code Online (Sandbox Code Playgroud)
您将添加一个像这样的临时布局
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>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8400 次 |
| 最近记录: |