Sadly you cannot pass arguments to XML Drawables.
If you don't have too many different values, you can use a <level-list>
and provide different versions of your shape.
Then you would change the level associated with your drawable to change the color using 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