以编程方式更改图层列表中的形状

时间:2015-03-01 14:14:46

标签: android xml

我有这个可绘制的文件:

<?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>

并且我想以编程方式仅更改一个椭圆的形状,但我发现没有做任何事情。我只想同时改变一个形状。

我做了很多研究,但没有解释如何做到这一点。

所以请帮帮我

1 个答案:

答案 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