我有一个将绘制椭圆形的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类的值,是否可能?
如果没有,还有其他办法吗?
答案 0 :(得分:5)
遗憾的是,您无法将参数传递给XML Drawables。
如果您没有太多不同的值,则可以使用<level-list>
并提供不同版本的形状。
然后,您将更改与drawable相关联的级别,以使用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>
<强> MyActivity.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
答案 1 :(得分: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 );
此解决方案比使用级别列表更具灵活性,因为您不依赖于使用视图来设置级别。