Fixing Drawable methods for find by layer ID and invalidation callback
BUG: 12475487, 12475575 Change-Id: Icbf11c76eaf9357fe2076bf60f7e448db65bc835
This commit is contained in:
@@ -229,15 +229,18 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
|
||||
}
|
||||
|
||||
/**
|
||||
* Look for a layer with the given id, and returns its {@link Drawable}.
|
||||
* Looks for a layer with the given ID and returns its {@link Drawable}.
|
||||
* <p>
|
||||
* If multiple layers are found for the given ID, returns the
|
||||
* {@link Drawable} for the matching layer at the highest index.
|
||||
*
|
||||
* @param id The layer ID to search for.
|
||||
* @return The {@link Drawable} of the layer that has the given id in the hierarchy or null.
|
||||
* @return The {@link Drawable} for the highest-indexed layer that has the
|
||||
* given ID, or null if not found.
|
||||
*/
|
||||
public Drawable findDrawableByLayerId(int id) {
|
||||
final ChildDrawable[] layers = mLayerState.mChildren;
|
||||
final int N = mLayerState.mNum;
|
||||
for (int i = 0; i < N; i++) {
|
||||
for (int i = mLayerState.mNum - 1; i >= 0; i--) {
|
||||
if (layers[i].mId == id) {
|
||||
return layers[i].mDrawable;
|
||||
}
|
||||
@@ -370,7 +373,7 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
|
||||
}
|
||||
|
||||
/**
|
||||
* Invalidates cached padding.
|
||||
* Invalidates cached padding and recomputes child bounds.
|
||||
*/
|
||||
private void invalidatePadding() {
|
||||
mHasCachedPadding = false;
|
||||
@@ -379,10 +382,9 @@ public class LayerDrawable extends Drawable implements Drawable.Callback {
|
||||
|
||||
@Override
|
||||
public void invalidateDrawable(Drawable who) {
|
||||
final Callback callback = getCallback();
|
||||
if (callback != null) {
|
||||
callback.invalidateDrawable(this);
|
||||
}
|
||||
// Something changed, maybe it was the child drawable's padding.
|
||||
invalidatePadding();
|
||||
invalidateSelf();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user