android - Wrapping a StateListDrawable -
i have view, on set statelistdrawable (defines state_pressed , default state) background in xml. works fine, states displayed expected.
i want programmatically draw on top of statelistdrawable, no matter in state is. this, created java class extends drawable, holds original background drawable; in ondraw first draws original drawable canvas , own additions. works, state of original drawable doesn't change.
i can see setstate of custom drawable called stateset contains android.r.attr.state_pressed among other states. delegate call original drawable, there setstate returns false , state doesn't change. changes when pass stateset containing nothing android.r.attr.state_pressed.
it seems if statelistdrawable somehow can announce statesets interested in , caller of setstate respecting that, although didn't find related in docs or android source.
this setstate:
@override public boolean setstate(int[] stateset) { boolean changed = super.setstate(stateset); if (originalbackground != null) { // call returns true , changes state if // stateset *only* contains pressed state changed |= originalbackground.setstate(stateset); } return true; } my original background drawable:
<?xml version="1.0" encoding="utf-8"?> <selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true" android:drawable="@color/red"/> <item android:drawable="@color/green"/> </selector> how can make original drawable change state without filtering stateset state_pressed?
thanks pskink's example tried calling invalidateself in onstatechanged, did trick.
Comments
Post a Comment