Я хотел бы определить, какой цвет следует использовать при рисовании на холсте в зависимости от настраиваемого состояния. Это, как далеко я получил:Android: обновление пользовательского атрибута цвета с помощью селектора
В Рез/макет/content.xml:
<com.example.package.MyView
app:primary_color="@drawable/my_selector"
/>
primary_color является пользовательский атрибут, определенный в Рез/значения/attrs.xml:
<resource>
<declare-styleable name="MyView">
<attr name="primary_color" format="reference"/>
</declare-styleable>
</resource>
my_selector определяется в Рез/рисуем/my_selector.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res/com.example.package">
<item
app:state_a="true"
android:drawable="@drawable/red" />
<item
app:state_b="true"
android:drawable="@drawable/orange" />
<item
app:state_c="true"
android:drawable="@drawable/red" />
</selector>
красный, оранжевый и красный, определены в Рез/значений/colordrawab le.xml:
<resources>
<drawable name="red">#f00</drawable>
<drawable name="orange">#fb0</drawable>
<drawable name="green">#0f0</drawable>
</resources>
В MyView я могу получить эту вытяжке:
StateListDrawable primaryColor;
public MyView(Context context, AttributeSet attrs) {
super(context, attrs);
try{
primaryColor = (StateListDrawable) a.getDrawable(
R.styleable.MyView_primary_color);
}finally {
a.recycle();
}
}
primaryColor правильно обновляется с различными состояниями, я могу проверить это по телефону:
setBackground(primaryColor);
Но я хотите использовать этот цвет с помощью Paint, например:
paint.setColor(primaryColor);
Но это, очевидно, не допускается. Я попытался преобразовать primaryColor в ColorDrawable, у которого есть метод getColor(), но я не могу понять, как это сделать, если это возможно.
Любые предложения о том, как получить цвет, который можно использовать в представлении от селектора, будут потрясающими.