1b505074e8273887fbcd1e933738a42e770085fb8Jim Miller/* 2b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Copyright (C) 2011 The Android Open Source Project 3b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * 4b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Licensed under the Apache License, Version 2.0 (the "License"); 5b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * you may not use this file except in compliance with the License. 6b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * You may obtain a copy of the License at 7b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * 8b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * http://www.apache.org/licenses/LICENSE-2.0 9b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * 10b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Unless required by applicable law or agreed to in writing, software 11b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * distributed under the License is distributed on an "AS IS" BASIS, 12b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * See the License for the specific language governing permissions and 14b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * limitations under the License. 15b505074e8273887fbcd1e933738a42e770085fb8Jim Miller */ 16b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 17b505074e8273887fbcd1e933738a42e770085fb8Jim Millerpackage com.android.internal.widget.multiwaveview; 18b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 19b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.content.res.Resources; 20b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.graphics.Canvas; 21b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.graphics.ColorFilter; 22b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.graphics.drawable.Drawable; 23b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.graphics.drawable.StateListDrawable; 24b505074e8273887fbcd1e933738a42e770085fb8Jim Millerimport android.util.Log; 25b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 26b505074e8273887fbcd1e933738a42e770085fb8Jim Millerpublic class TargetDrawable { 27b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private static final String TAG = "TargetDrawable"; 2829aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn private static final boolean DEBUG = false; 2929aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn 30b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public static final int[] STATE_ACTIVE = 31b505074e8273887fbcd1e933738a42e770085fb8Jim Miller { android.R.attr.state_enabled, android.R.attr.state_active }; 32b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public static final int[] STATE_INACTIVE = 33b505074e8273887fbcd1e933738a42e770085fb8Jim Miller { android.R.attr.state_enabled, -android.R.attr.state_active }; 34b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public static final int[] STATE_FOCUSED = 3510c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller { android.R.attr.state_enabled, -android.R.attr.state_active, 3610c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller android.R.attr.state_focused }; 37b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 38b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mTranslationX = 0.0f; 39b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mTranslationY = 0.0f; 4010c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller private float mPositionX = 0.0f; 4110c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller private float mPositionY = 0.0f; 42b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mScaleX = 1.0f; 43b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mScaleY = 1.0f; 44b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mAlpha = 1.0f; 45b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private Drawable mDrawable; 46b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller private boolean mEnabled = true; 473294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller private final int mResourceId; 48b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 49b505074e8273887fbcd1e933738a42e770085fb8Jim Miller /* package */ static class DrawableWithAlpha extends Drawable { 50b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private float mAlpha = 1.0f; 51b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private Drawable mRealDrawable; 52b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public DrawableWithAlpha(Drawable realDrawable) { 53b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mRealDrawable = realDrawable; 54b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 55b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setAlpha(float alpha) { 56b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mAlpha = alpha; 57b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 58b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getAlpha() { 59b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mAlpha; 60b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 61b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void draw(Canvas canvas) { 62b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mRealDrawable.setAlpha((int) Math.round(mAlpha * 255f)); 63b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mRealDrawable.draw(canvas); 64b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 65b505074e8273887fbcd1e933738a42e770085fb8Jim Miller @Override 66b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setAlpha(int alpha) { 67b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mRealDrawable.setAlpha(alpha); 68b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 69b505074e8273887fbcd1e933738a42e770085fb8Jim Miller @Override 70b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setColorFilter(ColorFilter cf) { 71b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mRealDrawable.setColorFilter(cf); 72b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 73b505074e8273887fbcd1e933738a42e770085fb8Jim Miller @Override 74b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public int getOpacity() { 75b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mRealDrawable.getOpacity(); 76b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 77b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 78b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 79b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public TargetDrawable(Resources res, int resId) { 80b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller mResourceId = resId; 813294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller setDrawable(res, resId); 823294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller } 833294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller 843294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller public void setDrawable(Resources res, int resId) { 853294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller // Note we explicitly don't set mResourceId to resId since we allow the drawable to be 863294b6b09b2f52cb44005720051c32c9c851fc9fJim Miller // swapped at runtime and want to re-use the existing resource id for identification. 87b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller Drawable drawable = resId == 0 ? null : res.getDrawable(resId); 88b505074e8273887fbcd1e933738a42e770085fb8Jim Miller // Mutate the drawable so we can animate shared drawable properties. 89b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mDrawable = drawable != null ? drawable.mutate() : null; 90b505074e8273887fbcd1e933738a42e770085fb8Jim Miller resizeDrawables(); 91b505074e8273887fbcd1e933738a42e770085fb8Jim Miller setState(STATE_INACTIVE); 92b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 93b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 944c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller public TargetDrawable(TargetDrawable other) { 954c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller mResourceId = other.mResourceId; 964c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller // Mutate the drawable so we can animate shared drawable properties. 974c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller mDrawable = other.mDrawable != null ? other.mDrawable.mutate() : null; 984c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller resizeDrawables(); 994c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller setState(STATE_INACTIVE); 1004c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller } 1014c351d62e7a09bcc29e7d0329bcdd947a302cf40Jim Miller 102b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setState(int [] state) { 103b505074e8273887fbcd1e933738a42e770085fb8Jim Miller if (mDrawable instanceof StateListDrawable) { 104b505074e8273887fbcd1e933738a42e770085fb8Jim Miller StateListDrawable d = (StateListDrawable) mDrawable; 105b505074e8273887fbcd1e933738a42e770085fb8Jim Miller d.setState(state); 106b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 107b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 108b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 109b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public boolean hasState(int [] state) { 110b505074e8273887fbcd1e933738a42e770085fb8Jim Miller if (mDrawable instanceof StateListDrawable) { 111b505074e8273887fbcd1e933738a42e770085fb8Jim Miller StateListDrawable d = (StateListDrawable) mDrawable; 112b505074e8273887fbcd1e933738a42e770085fb8Jim Miller // TODO: this doesn't seem to work 113b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return d.getStateDrawableIndex(state) != -1; 114b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 115b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return false; 116b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 117b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 118b505074e8273887fbcd1e933738a42e770085fb8Jim Miller /** 119b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Returns true if the drawable is a StateListDrawable and is in the focused state. 120b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * 121b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * @return 122b505074e8273887fbcd1e933738a42e770085fb8Jim Miller */ 123b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public boolean isActive() { 124b505074e8273887fbcd1e933738a42e770085fb8Jim Miller if (mDrawable instanceof StateListDrawable) { 125b505074e8273887fbcd1e933738a42e770085fb8Jim Miller StateListDrawable d = (StateListDrawable) mDrawable; 126b505074e8273887fbcd1e933738a42e770085fb8Jim Miller int[] states = d.getState(); 127b505074e8273887fbcd1e933738a42e770085fb8Jim Miller for (int i = 0; i < states.length; i++) { 128b505074e8273887fbcd1e933738a42e770085fb8Jim Miller if (states[i] == android.R.attr.state_focused) { 129b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return true; 130b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 131b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 132b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 133b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return false; 134b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 135b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 136b505074e8273887fbcd1e933738a42e770085fb8Jim Miller /** 137b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Returns true if this target is enabled. Typically an enabled target contains a valid 138b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * drawable in a valid state. Currently all targets with valid drawables are valid. 139b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * 140b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * @return 141b505074e8273887fbcd1e933738a42e770085fb8Jim Miller */ 142b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller public boolean isEnabled() { 143b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller return mDrawable != null && mEnabled; 144b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 145b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 146b505074e8273887fbcd1e933738a42e770085fb8Jim Miller /** 147b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * Makes drawables in a StateListDrawable all the same dimensions. 148b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * If not a StateListDrawable, then justs sets the bounds to the intrinsic size of the 149b505074e8273887fbcd1e933738a42e770085fb8Jim Miller * drawable. 150b505074e8273887fbcd1e933738a42e770085fb8Jim Miller */ 151b505074e8273887fbcd1e933738a42e770085fb8Jim Miller private void resizeDrawables() { 152b505074e8273887fbcd1e933738a42e770085fb8Jim Miller if (mDrawable instanceof StateListDrawable) { 153b505074e8273887fbcd1e933738a42e770085fb8Jim Miller StateListDrawable d = (StateListDrawable) mDrawable; 154b505074e8273887fbcd1e933738a42e770085fb8Jim Miller int maxWidth = 0; 155b505074e8273887fbcd1e933738a42e770085fb8Jim Miller int maxHeight = 0; 156b505074e8273887fbcd1e933738a42e770085fb8Jim Miller for (int i = 0; i < d.getStateCount(); i++) { 157b505074e8273887fbcd1e933738a42e770085fb8Jim Miller Drawable childDrawable = d.getStateDrawable(i); 158b505074e8273887fbcd1e933738a42e770085fb8Jim Miller maxWidth = Math.max(maxWidth, childDrawable.getIntrinsicWidth()); 159b505074e8273887fbcd1e933738a42e770085fb8Jim Miller maxHeight = Math.max(maxHeight, childDrawable.getIntrinsicHeight()); 160b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 16129aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn if (DEBUG) Log.v(TAG, "union of childDrawable rects " + d + " to: " 16229aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn + maxWidth + "x" + maxHeight); 163b505074e8273887fbcd1e933738a42e770085fb8Jim Miller d.setBounds(0, 0, maxWidth, maxHeight); 164b505074e8273887fbcd1e933738a42e770085fb8Jim Miller for (int i = 0; i < d.getStateCount(); i++) { 165b505074e8273887fbcd1e933738a42e770085fb8Jim Miller Drawable childDrawable = d.getStateDrawable(i); 16629aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn if (DEBUG) Log.v(TAG, "sizing drawable " + childDrawable + " to: " 16729aae6f36e565b8f2a99f2193597b964bb800ee8Dianne Hackborn + maxWidth + "x" + maxHeight); 168b505074e8273887fbcd1e933738a42e770085fb8Jim Miller childDrawable.setBounds(0, 0, maxWidth, maxHeight); 169b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 170b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } else if (mDrawable != null) { 171b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mDrawable.setBounds(0, 0, 172b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mDrawable.getIntrinsicWidth(), mDrawable.getIntrinsicHeight()); 173b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 174b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 175b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 176b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setX(float x) { 177b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mTranslationX = x; 178b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 179b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 180b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setY(float y) { 181b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mTranslationY = y; 182b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 183b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 184b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setScaleX(float x) { 185b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mScaleX = x; 186b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 187b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 188b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setScaleY(float y) { 189b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mScaleY = y; 190b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 191b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 192b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void setAlpha(float alpha) { 193b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mAlpha = alpha; 194b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 195b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 196b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getX() { 197b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mTranslationX; 198b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 199b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 200b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getY() { 201b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mTranslationY; 202b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 203b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 204b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getScaleX() { 205b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mScaleX; 206b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 207b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 208b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getScaleY() { 209b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mScaleY; 210b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 211b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 212b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public float getAlpha() { 213b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mAlpha; 214b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 215b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 21610c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller public void setPositionX(float x) { 21710c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller mPositionX = x; 21810c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller } 21910c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller 22010c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller public void setPositionY(float y) { 22110c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller mPositionY = y; 22210c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller } 22310c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller 22410c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller public float getPositionX() { 22510c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller return mPositionX; 22610c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller } 22710c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller 22810c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller public float getPositionY() { 22910c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller return mPositionY; 23010c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller } 23110c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller 232b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public int getWidth() { 233b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mDrawable != null ? mDrawable.getIntrinsicWidth() : 0; 234b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 235b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 236b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public int getHeight() { 237b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return mDrawable != null ? mDrawable.getIntrinsicHeight() : 0; 238b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 239b505074e8273887fbcd1e933738a42e770085fb8Jim Miller 240b505074e8273887fbcd1e933738a42e770085fb8Jim Miller public void draw(Canvas canvas) { 241b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller if (mDrawable == null || !mEnabled) { 242b505074e8273887fbcd1e933738a42e770085fb8Jim Miller return; 243b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 244b505074e8273887fbcd1e933738a42e770085fb8Jim Miller canvas.save(Canvas.MATRIX_SAVE_FLAG); 24510c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller canvas.scale(mScaleX, mScaleY, mPositionX, mPositionY); 24610c66afbd05e91143ea9bd109d3ce578e53dab14Jim Miller canvas.translate(mTranslationX + mPositionX, mTranslationY + mPositionY); 247b505074e8273887fbcd1e933738a42e770085fb8Jim Miller canvas.translate(-0.5f * getWidth(), -0.5f * getHeight()); 248b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mDrawable.setAlpha((int) Math.round(mAlpha * 255f)); 249b505074e8273887fbcd1e933738a42e770085fb8Jim Miller mDrawable.draw(canvas); 250b505074e8273887fbcd1e933738a42e770085fb8Jim Miller canvas.restore(); 251b505074e8273887fbcd1e933738a42e770085fb8Jim Miller } 252b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller 253b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller public void setEnabled(boolean enabled) { 254b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller mEnabled = enabled; 255b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller } 256b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller 257b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller public int getResourceId() { 258b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller return mResourceId; 259b030476d193a423f6c1baf3053f66fc768c925e0Jim Miller } 260b505074e8273887fbcd1e933738a42e770085fb8Jim Miller} 261