summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--graphics/java/android/graphics/drawable/ClipDrawable.java17
-rw-r--r--graphics/java/android/graphics/drawable/DrawableWrapper.java13
2 files changed, 22 insertions, 8 deletions
diff --git a/graphics/java/android/graphics/drawable/ClipDrawable.java b/graphics/java/android/graphics/drawable/ClipDrawable.java
index 2acf60250771..31fccd0880c9 100644
--- a/graphics/java/android/graphics/drawable/ClipDrawable.java
+++ b/graphics/java/android/graphics/drawable/ClipDrawable.java
@@ -150,6 +150,23 @@ public class ClipDrawable extends DrawableWrapper {
}
@Override
+ public int getOpacity() {
+ final Drawable dr = getDrawable();
+ final int opacity = dr.getOpacity();
+ if (opacity == PixelFormat.TRANSPARENT || dr.getLevel() == 0) {
+ return PixelFormat.TRANSPARENT;
+ }
+
+ final int level = getLevel();
+ if (level >= MAX_LEVEL) {
+ return dr.getOpacity();
+ }
+
+ // Some portion of non-transparent drawable is showing.
+ return PixelFormat.TRANSLUCENT;
+ }
+
+ @Override
public void draw(Canvas canvas) {
final Drawable dr = getDrawable();
if (dr.getLevel() == 0) {
diff --git a/graphics/java/android/graphics/drawable/DrawableWrapper.java b/graphics/java/android/graphics/drawable/DrawableWrapper.java
index 58d43f927cbe..9185e1a06466 100644
--- a/graphics/java/android/graphics/drawable/DrawableWrapper.java
+++ b/graphics/java/android/graphics/drawable/DrawableWrapper.java
@@ -180,7 +180,8 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
@Override
public int getChangingConfigurations() {
return super.getChangingConfigurations()
- | (mState != null ? mState.getChangingConfigurations() : 0);
+ | (mState != null ? mState.getChangingConfigurations() : 0)
+ | mDrawable.getChangingConfigurations();
}
@Override
@@ -366,15 +367,12 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
}
/**
- * Called during inflation to inflate the child element.
+ * Called during inflation to inflate the child element. The last valid
+ * child element will take precedence over any other child elements or
+ * explicit drawable attribute.
*/
void inflateChildDrawable(Resources r, XmlPullParser parser, AttributeSet attrs,
Resources.Theme theme) throws XmlPullParserException, IOException {
- // Drawable specified on the root element takes precedence.
- if (getDrawable() != null) {
- return;
- }
-
// Seek to the first child element.
Drawable dr = null;
int type;
@@ -383,7 +381,6 @@ public abstract class DrawableWrapper extends Drawable implements Drawable.Callb
&& (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
if (type == XmlPullParser.START_TAG) {
dr = Drawable.createFromXmlInner(r, parser, attrs, theme);
- break;
}
}