19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics.drawable; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 19d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viveretteimport com.android.internal.R; 20d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParser; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport org.xmlpull.v1.XmlPullParserException; 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.Resources; 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.content.res.TypedArray; 2652b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viveretteimport android.content.res.Resources.Theme; 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.*; 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.view.Gravity; 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.util.AttributeSet; 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport java.io.IOException; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * A Drawable that clips another Drawable based on this Drawable's current 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * level value. You can control how much the child Drawable gets clipped in width 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and height based on the level, as well as a gravity to control where it is 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * placed in its overall container. Most often used to implement things like 38dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * progress bars, by increasing the drawable's level with {@link 39dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * android.graphics.drawable.Drawable#setLevel(int) setLevel()}. 40dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * <p class="note"><strong>Note:</strong> The drawable is clipped completely and not visible when 41dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * the level is 0 and fully revealed when the level is 10,000.</p> 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 43dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * <p>It can be defined in an XML file with the <code><clip></code> element. For more 44dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * information, see the guide to <a 45dfe5c204403bc56c29bb36410574eab8b1950417Scott Main * href="{@docRoot}guide/topics/resources/drawable-resource.html">Drawable Resources</a>.</p> 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_clipOrientation 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_gravity 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @attr ref android.R.styleable#ClipDrawable_drawable 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 51a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverettepublic class ClipDrawable extends DrawableWrapper { 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int HORIZONTAL = 1; 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public static final int VERTICAL = 2; 54b3c56086d802ae28888dd97ba1f49bd6cee0b673Alan Viverette 55a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette private static final int MAX_LEVEL = 10000; 56a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 57a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette private final Rect mTmpRect = new Rect(); 58a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 59a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette private ClipState mState; 60727cae197b123ef764a1f8fbe08a995b000d14c3Alan Viverette 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project ClipDrawable() { 62a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette this(new ClipState(null), null); 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 66a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * Creates a new clip drawable with the specified gravity and orientation. 67a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * 68a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * @param drawable the drawable to clip 69a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * @param gravity gravity constant (see {@link Gravity} used to position 70a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * the clipped drawable within the parent container 71a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * @param orientation bitwise-or of {@link #HORIZONTAL} and/or 72a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette * {@link #VERTICAL} 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public ClipDrawable(Drawable drawable, int gravity, int orientation) { 75a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette this(new ClipState(null), null); 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 77d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette mState.mGravity = gravity; 78d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette mState.mOrientation = orientation; 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 80a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette setDrawable(drawable); 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 8452b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette public void inflate(Resources r, XmlPullParser parser, AttributeSet attrs, Theme theme) 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project throws XmlPullParserException, IOException { 8652b999f0721b53e9c6e18a4bd664e89aeb65b2d5Alan Viverette super.inflate(r, parser, attrs, theme); 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 88d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette final TypedArray a = obtainAttributes(r, theme, attrs, R.styleable.ClipDrawable); 89d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette updateStateFromTypedArray(a); 90a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette inflateChildDrawable(r, parser, attrs, theme); 91d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette verifyRequiredAttributes(a); 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project a.recycle(); 93d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 95d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette private void verifyRequiredAttributes(TypedArray a) throws XmlPullParserException { 96d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette // If we're not waiting on a theme, verify required attributes. 97a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette if (getDrawable() == null && (mState.mThemeAttrs == null 98d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette || mState.mThemeAttrs[R.styleable.ClipDrawable_drawable] == 0)) { 99d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette throw new XmlPullParserException(a.getPositionDescription() 100d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette + ": <clip> tag requires a 'drawable' attribute or " 101d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette + "child tag defining a drawable"); 102d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette } 103d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette } 104d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette 105a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette @Override 106a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette void updateStateFromTypedArray(TypedArray a) { 107a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette super.updateStateFromTypedArray(a); 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 109a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette final ClipState state = mState; 110a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette state.mOrientation = a.getInt( 111a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette R.styleable.ClipDrawable_clipOrientation, state.mOrientation); 112a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette state.mGravity = a.getInt( 113a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette R.styleable.ClipDrawable_gravity, state.mGravity); 114d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette 115d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette final Drawable dr = a.getDrawable(R.styleable.ClipDrawable_drawable); 116d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette if (dr != null) { 117a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette setDrawable(dr); 118d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette } 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 12117cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette @Override 12217cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette public void applyTheme(Theme t) { 123d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette final ClipState state = mState; 124a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette if (state == null) { 12517cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette return; 12617cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette } 12717cd4dfe3a05c2eddbcbc76066ff3b13fc3f2c8bAlan Viverette 128a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette if (state.mThemeAttrs != null) { 129a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette final TypedArray a = t.resolveAttributes(state.mThemeAttrs, R.styleable.ClipDrawable); 130a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette try { 131a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette updateStateFromTypedArray(a); 132a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette verifyRequiredAttributes(a); 133a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette } catch (XmlPullParserException e) { 134a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette throw new RuntimeException(e); 135a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette } finally { 136a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette a.recycle(); 137a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette } 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 140a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette // The drawable may have changed as a result of applying the theme, so 141a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette // apply the theme to the wrapped drawable last. 142a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette super.applyTheme(t); 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected boolean onLevelChange(int level) { 147a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette super.onLevelChange(level); 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project invalidateSelf(); 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return true; 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 153b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette public int getOpacity() { 154b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette final Drawable dr = getDrawable(); 155b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette final int opacity = dr.getOpacity(); 156b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette if (opacity == PixelFormat.TRANSPARENT || dr.getLevel() == 0) { 157b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette return PixelFormat.TRANSPARENT; 158b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette } 159b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette 160b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette final int level = getLevel(); 161b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette if (level >= MAX_LEVEL) { 162b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette return dr.getOpacity(); 163b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette } 164b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette 165b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette // Some portion of non-transparent drawable is showing. 166b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette return PixelFormat.TRANSLUCENT; 167b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette } 168b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette 169b63b93dee7744f00280ea998ef24d0a1d57d3934Alan Viverette @Override 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas) { 171a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette final Drawable dr = getDrawable(); 172a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette if (dr.getLevel() == 0) { 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return; 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Rect r = mTmpRect; 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project final Rect bounds = getBounds(); 178a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette final int level = getLevel(); 179a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int w = bounds.width(); 181d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette final int iw = 0; //mState.mDrawable.getIntrinsicWidth(); 182d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette if ((mState.mOrientation & HORIZONTAL) != 0) { 183a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette w -= (w - iw) * (MAX_LEVEL - level) / MAX_LEVEL; 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 185a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int h = bounds.height(); 187d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette final int ih = 0; //mState.mDrawable.getIntrinsicHeight(); 188d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette if ((mState.mOrientation & VERTICAL) != 0) { 189a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette h -= (h - ih) * (MAX_LEVEL - level) / MAX_LEVEL; 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 191a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 192b03b434089cf2106c467b2827a65e5c589c91d01Fabrice Di Meglio final int layoutDirection = getLayoutDirection(); 193d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette Gravity.apply(mState.mGravity, w, h, bounds, r, layoutDirection); 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (w > 0 && h > 0) { 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.save(); 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.clipRect(r); 198a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette dr.draw(canvas); 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.restore(); 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 203a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette static final class ClipState extends DrawableWrapper.DrawableWrapperState { 204d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette int mOrientation = HORIZONTAL; 205d21fd9d1ccd2b525f9c004a6cd9ba19a645701abAlan Viverette int mGravity = Gravity.LEFT; 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 207a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette ClipState(ClipState orig) { 208a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette super(orig); 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project if (orig != null) { 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mOrientation = orig.mOrientation; 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mGravity = orig.mGravity; 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 217c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn public Drawable newDrawable(Resources res) { 218c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn return new ClipDrawable(this, res); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 222c2974809373697147cbe5754835cc871fb93aef1Dianne Hackborn private ClipDrawable(ClipState state, Resources res) { 223a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette super(state, res); 224a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette 225a12962207155305da44b5a1b8fb9acaed358c14cAlan Viverette mState = state; 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 229