Я искал возможности для определения различных фигур внутри одного файла shape.xml и ссылки на каждую из них по некоторым конкретным событиям.
Наконец-то я нашел решение своего вопроса. И ответ использует уровень-список.
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android">
<item android:maxLevel="0">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<gradient android:startColor="#aaa"
android:endColor="#eee" android:angle="270" />
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp" android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
</item>
<item android:maxLevel="1">
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<gradient android:startColor="#eee" android:centerColor="#ddd"
android:endColor="#00fff2" android:angle="270" />
<corners android:bottomRightRadius="7dp"
android:bottomLeftRadius="7dp" android:topLeftRadius="7dp"
android:topRightRadius="7dp" />
</shape>
</item>
</level-list>
Примените это к атрибуту фона в стиле. Чередование различных форм может быть достигнуто путем установки уровня для этого элемента.
Например: findViewById(R.id.mybutton).getBackground().setLevel(1);
В приведенном выше коде я устанавливаю вторую фигуру для кнопки с идентификатором mybutton.