Quello che sto cercando di ottenere è utilizzare un Drawable con un paio di livelli al suo interno, ma controllare alcuni valori in fase di esecuzione come ad esempio startColor per il gradiente. Ecco quello che ho in my_layered_shape.xml:Android - come definire ShapeDrawables al livello di programmazione?
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android" >
<item>
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<solid android:color="#FFFFFFFF" />
</shape>
</item>
<item android:top="1dp" android:bottom="1dp">
<shape android:shape="rectangle">
<stroke android:width="1dp" android:color="#FF000000" />
<gradient
android:startColor="#FFFFFFFF"
android:centerColor="#FFFFFF88"
android:endColor="#FFFFFFFF"
android:gradientRadius="250"
android:centerX="1"
android:centerY="0"
android:angle="315"
/>
</shape>
</item>
</layer-list>
E se uso mMyImageView.setBackgroundResource (R.drawable.my_layered_shape) funziona. Non mi dispiace dividere l'xml se necessario, o fare tutto il programma a patto che ci sia un modo per ottenere i vari valori di colore. Il concetto Vado a fare a livello di codice (vale a dire il meglio di me a fare lo stesso in codice come questo xml) è:
Drawable[] layers = new Drawable[2];
ShapeDrawable sd1 = new ShapeDrawable(new RectShape());
sd1.getPaint().setColor(0xFFFFFFFF);
sd1.getPaint().setStyle(Style.STROKE);
sd1.getPaint().setStrokeWidth(1);
// sd1.getPaint().somehow_set_stroke_color?
ShapeDrawable sd2 = new ShapeDrawable(new RectShape());
sd2.getPaint().setColor(0xFF000000);
sd2.getPaint().setStyle(Style.STROKE);
// sd2.getPaint().somehow_set_stroke_color?
// sd2.getPaint().somehow_set_gradient_params?
layers[0] = sd1;
layers[1] = sd2;
LayerDrawable composite = new LayerDrawable(layers);
mMyImageView.setBackgroundDrawable(composite);
Grazie.
stranamente, la classe GradientDrawable non ha il metodo "setPadding", c'è qualche problema? – Palani
Eccellente, ha risolto il mio problema – Goofy