Methods Summary |
---|
public void | addState(int[] stateSet, Drawable drawable)Add a new image/string ID to the set of images.
if (drawable != null) {
mStateListState.addStateSet(stateSet, drawable);
// in case the new state matches our current state...
onStateChange(getState());
}
|
public int | getStateCount()Gets the number of states contained in this drawable.
return mStateListState.getChildCount();
|
public Drawable | getStateDrawable(int index)Gets the drawable at an index.
return mStateListState.getChildren()[index];
|
public int | getStateDrawableIndex(int[] stateSet)Gets the index of the drawable with the provided state set.
return mStateListState.indexOfStateSet(stateSet);
|
android.graphics.drawable.StateListDrawable$StateListState | getStateListState()
return mStateListState;
|
public int[] | getStateSet(int index)Gets the state set at an index.
return mStateListState.mStateSets[index];
|
public void | inflate(android.content.res.Resources r, org.xmlpull.v1.XmlPullParser parser, android.util.AttributeSet attrs)
TypedArray a = r.obtainAttributes(attrs,
com.android.internal.R.styleable.StateListDrawable);
super.inflateWithAttributes(r, parser, a,
com.android.internal.R.styleable.StateListDrawable_visible);
mStateListState.setVariablePadding(a.getBoolean(
com.android.internal.R.styleable.StateListDrawable_variablePadding, false));
mStateListState.setConstantSize(a.getBoolean(
com.android.internal.R.styleable.StateListDrawable_constantSize, false));
a.recycle();
int type;
final int innerDepth = parser.getDepth() + 1;
int depth;
while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
&& ((depth = parser.getDepth()) >= innerDepth
|| type != XmlPullParser.END_TAG)) {
if (type != XmlPullParser.START_TAG) {
continue;
}
if (depth > innerDepth || !parser.getName().equals("item")) {
continue;
}
int drawableRes = 0;
int i;
int j = 0;
final int numAttrs = attrs.getAttributeCount();
int[] states = new int[numAttrs];
for (i = 0; i < numAttrs; i++) {
final int stateResId = attrs.getAttributeNameResource(i);
if (stateResId == 0) break;
if (stateResId == com.android.internal.R.attr.drawable) {
drawableRes = attrs.getAttributeResourceValue(i, 0);
} else {
states[j++] = attrs.getAttributeBooleanValue(i, false)
? stateResId
: -stateResId;
}
}
states = StateSet.trimStateSet(states, j);
Drawable dr;
if (drawableRes != 0) {
dr = r.getDrawable(drawableRes);
} else {
while ((type = parser.next()) == XmlPullParser.TEXT) {
}
if (type != XmlPullParser.START_TAG) {
throw new XmlPullParserException(
parser.getPositionDescription()
+ ": <item> tag requires a 'drawable' attribute or "
+ "child tag defining a drawable");
}
dr = Drawable.createFromXmlInner(r, parser, attrs);
}
mStateListState.addStateSet(states, dr);
}
onStateChange(getState());
|
public boolean | isStateful()
return true;
|
public Drawable | mutate()
if (!mMutated && super.mutate() == this) {
final int[][] sets = mStateListState.mStateSets;
final int count = sets.length;
mStateListState.mStateSets = new int[count][];
for (int i = 0; i < count; i++) {
mStateListState.mStateSets[i] = sets[i].clone();
}
mMutated = true;
}
return this;
|
protected boolean | onStateChange(int[] stateSet)
int idx = mStateListState.indexOfStateSet(stateSet);
if (idx < 0) {
idx = mStateListState.indexOfStateSet(StateSet.WILD_CARD);
}
if (selectDrawable(idx)) {
return true;
}
return super.onStateChange(stateSet);
|