我有这个可绘制的文件:
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:left="6dp"
android:right="6dp"
android:top="6dp"
android:bottom="6dp"
>
<shape android:shape="oval">
<size android:width="170dp"
android:height="170dp"/>
<solid android:color="@color/primaryColor"/>
</shape>
</item>
<item
android:left="18dp"
android:right="18dp"
android:top="18dp"
android:bottom="18dp">
<shape android:shape="oval" >
<size android:width="140dp"
android:height="140dp"/>
<solid android:color="#EEEEEE"/>
</shape>
</item>
<item
android:left="30dp"
android:right="30dp"
android:top="30dp"
android:bottom="30dp">
<shape android:shape="oval" >
<size android:width="140dp"
android:height="140dp"/>
<solid android:color="@color/primaryColor"/>
</shape>
</item>
</layer-list>
并且我想以编程方式仅更改一个椭圆的形状,但我发现没有做任何事情。我只想同时改变一个形状。
我做了很多研究,但没有解释如何做到这一点。
所以请帮帮我
答案 0 :(得分:1)
好吧,您可以使用Gradient drawable来实现这一点,首先为您的图层列表项提供ID
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:id="@+id/item1"
android:left="6dp"
android:right="6dp"
android:top="6dp"
android:bottom="6dp"
>
<shape android:shape="oval">
<size android:width="170dp"
android:height="170dp"/>
<solid android:color="@color/primaryColor"/>
</shape>
</item>
<item
android:id="@+id/item2"
android:left="18dp"
android:right="18dp"
android:top="18dp"
android:bottom="18dp">
<shape android:shape="oval" >
<size android:width="140dp"
android:height="140dp"/>
<solid android:color="#EEEEEE"/>
</shape>
</item>
<item
android:id="@+id/item3"
android:left="30dp"
android:right="30dp"
android:top="30dp"
android:bottom="30dp">e
<shape android:shape="oval" >
<size android:width="140dp"
android:height="140dp"/>
<solid android:color="@color/primaryColor"/>
</shape>
</item>
</layer-list>
然后改变你的形状项目
LayerDrawable d = (LayerDrawable) context.getResources().getDrawable(R.drawable.your_drawable_file_name);
GradientDrawable shape = (GradientDrawable) d.findDrawableByLayerId(R.id.item1);
shape.setShape(GradientDrawable.RECTANGLE);
//... Do same for item with id item2 and item3