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