4

我有一个将绘制椭圆形的xml,代码如下:

<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="oval">
    <solid android:color="#61118"/>
    <stroke android:width="1sp" android:color="#1B434D" />
</shape>

现在我在这里android:color="#61118"我需要从java类传递值,这可能吗?

如果没有,还有其他方法吗?

4

2 回答 2

5

遗憾的是,您不能将参数传递给 XML Drawables。

如果您没有太多不同的值,则可以使用 a<level-list>并提供不同版本的形状。

然后,您将更改与您的可绘制对象关联的级别以使用Drawable.setLevel(int).


my_drawable.xml

<level-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:maxLevel="0">
        <shape android:shape="oval">
            <solid android:color="@color/red"/>
            <stroke android:width="1sp" android:color="@color/border" />
        </shape>
    </item>
    <item android:maxLevel="1">
        <shape android:shape="oval">
            <solid android:color="@color/green"/>
            <stroke android:width="1sp" android:color="@color/border" />
        </shape>
    </item>
    <item android:maxLevel="2">
        <shape android:shape="oval">
            <solid android:color="@color/blue"/>
            <stroke android:width="1sp" android:color="@color/blue" />
        </shape>
    </item>
</level-list>

我的活动.java

// myView is a View (or a subclass of View) 
// with background set to R.drawable.my_drawable
myView.getBackground().setLevel(0); // Set color to red
myView.getBackground().setLevel(1); // Set color to green
myView.getBackground().setLevel(2); // Set color to blue

// myImageView is an ImageView with its source
// set to R.drawable.my_drawable
myImageView.setImageLevel(0); // Set color to red
myImageView.setImageLevel(1); // Set color to green
myImageView.setImageLevel(2); // Set color to blue
于 2013-03-21T17:33:25.060 回答
1

是的,您可以动态更改形状的颜色。假设你的 xml 在,'res/drawable/oval_shape.xml'

GradientDrawable shape = (GradientDrawable) getResources().getDrawable(R.drawable.oval_shape);
int argb = 0x12345678;
shape.setBackground( argb );

如果您想更改边框颜色

int width = 1;
int argb = 0x87654321;
shape.setStroke( width, argb );

此解决方案提供了比使用级别列表更大的灵活性,因为您不必使用视图来设置级别。

于 2013-11-21T01:25:22.297 回答