GradientsActivity.java revision 14830948d02f768c41b97b7a8d15e1b3cab78267
10bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy/*
20bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * Copyright (C) 2010 The Android Open Source Project
30bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy *
40bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
50bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * you may not use this file except in compliance with the License.
60bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * You may obtain a copy of the License at
70bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy *
80bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
90bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy *
100bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * Unless required by applicable law or agreed to in writing, software
110bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
120bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
130bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * See the License for the specific language governing permissions and
140bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy * limitations under the License.
150bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy */
160bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
170bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guypackage com.android.test.hwui;
180bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
190bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.app.Activity;
200bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.content.Context;
2114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.Bitmap;
2214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.BitmapFactory;
2314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.BitmapShader;
240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Canvas;
250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.LinearGradient;
2614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.RadialGradient;
270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Matrix;
280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Paint;
290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Shader;
3014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.SweepGradient;
310bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.os.Bundle;
32e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.view.Gravity;
330bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.view.View;
34e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.widget.FrameLayout;
35e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.widget.SeekBar;
360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy@SuppressWarnings({"UnusedDeclaration"})
380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guypublic class GradientsActivity extends Activity {
390bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    @Override
400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    protected void onCreate(Bundle savedInstanceState) {
410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        super.onCreate(savedInstanceState);
420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
43e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        final FrameLayout layout = new FrameLayout(this);
4414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
45e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        final ShadersView shadersView = new ShadersView(this);
46e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        final GradientView gradientView = new GradientView(this);
4714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        final RadialGradientView radialGradientView = new RadialGradientView(this);
4814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        final SweepGradientView sweepGradientView = new SweepGradientView(this);
4914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        final BitmapView bitmapView = new BitmapView(this);
5014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
51e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        final SeekBar rotateView = new SeekBar(this);
52e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        rotateView.setMax(360);
53e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        rotateView.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
54e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            @Override
55e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            public void onStopTrackingTouch(SeekBar seekBar) {
56e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
57e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
58e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            @Override
59e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            public void onStartTrackingTouch(SeekBar seekBar) {
60e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
61e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
62e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            @Override
63e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
6414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                gradientView.setRotationY((float) progress);
6514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                radialGradientView.setRotationX((float) progress);
6614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                sweepGradientView.setRotationY((float) progress);
6714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                bitmapView.setRotationX((float) progress);
68e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
69e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        });
70e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
71e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(shadersView);
72e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(gradientView, new FrameLayout.LayoutParams(
73e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                200, 200, Gravity.CENTER));
7414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
7514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
7614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(220, 0, 0, 0);
7714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(radialGradientView, lp);
7814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
7914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
8014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(440, 0, 0, 0);
8114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(sweepGradientView, lp);
8214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
8314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
8414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(220, -220, 0, 0);
8514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(bitmapView, lp);
8614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
87e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(rotateView, new FrameLayout.LayoutParams(
88e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                300, FrameLayout.LayoutParams.WRAP_CONTENT,
89e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
90e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
91e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        setContentView(layout);
92e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy    }
93e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
9414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class BitmapView extends View {
9514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
9614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
9714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        BitmapView(Context c) {
9814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
9914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
10014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
10114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            BitmapShader shader = new BitmapShader(texture, Shader.TileMode.REPEAT,
10214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                    Shader.TileMode.REPEAT);
10314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
10414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(shader);
10514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
10614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
10714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
10814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
10914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
11014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
11114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
11214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
11314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
11414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
11514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
11614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
11714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
11814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
11914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
120e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy    static class GradientView extends View {
121e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        private final Paint mPaint;
122e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
123e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        GradientView(Context c) {
124e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super(c);
125e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
126e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            LinearGradient gradient = new LinearGradient(0, 0, 200, 0, 0xFF000000, 0,
127e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                    Shader.TileMode.CLAMP);
128e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            mPaint = new Paint();
129e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            mPaint.setShader(gradient);
130e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
131e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
132e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        @Override
133e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
134e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
135e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            setMeasuredDimension(200, 200);
136e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
137e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
138e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        @Override
139e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        protected void onDraw(Canvas canvas) {
140e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super.onDraw(canvas);
141e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
142e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
1430bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
1440bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
14514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class RadialGradientView extends View {
14614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
14714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
14814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        RadialGradientView(Context c) {
14914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
15014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
15114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            RadialGradient gradient = new RadialGradient(0.0f, 0.0f, 100.0f, 0xff000000, 0xffffffff,
15214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                    Shader.TileMode.MIRROR);
15314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
15414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(gradient);
15514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
15614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
15714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
15814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
15914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
16014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
16114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
16214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
16314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
16414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
16514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
16614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
16714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
16814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
16914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
17014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class SweepGradientView extends View {
17114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
17214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
17314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        SweepGradientView(Context c) {
17414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
17514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
17614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            SweepGradient gradient = new SweepGradient(100.0f, 100.0f, 0xff000000, 0xffffffff);
17714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
17814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(gradient);
17914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
18014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
18114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
18214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
18314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
18414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
18514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
18614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
18714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
18814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
18914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
19014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
19114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
19214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
19314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
1940bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    static class ShadersView extends View {
1950bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Paint mPaint;
1960bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawWidth;
1970bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawHeight;
1980bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final LinearGradient mGradient;
1990bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Matrix mMatrix;
2000bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2010bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        ShadersView(Context c) {
2020bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super(c);
2030bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2040bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawWidth = 200;
2050bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawHeight = 200;
2060bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2070bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
2080bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix = new Matrix();
2090bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2100bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mPaint = new Paint();
2110bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
2120bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2130bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        @Override
2140bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        protected void onDraw(Canvas canvas) {
2150bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super.onDraw(canvas);
2160bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRGB(255, 255, 255);
2170bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2180bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            // Gradients
2190bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.save();
2200bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float top = 40.0f;
2210bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float right = 40.0f + mDrawWidth;
2220bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float left = 40.0f;
2230bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float bottom = 40.0f + mDrawHeight;
2240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mPaint.setShader(mGradient);
2260bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
2280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(90);
2290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(right, top);
2300bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
2310bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(right - mDrawWidth, top, right, top + mDrawHeight, mPaint);
2320bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2330bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top += 40.0f + mDrawHeight;
2340bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom += 40.0f + mDrawHeight;
2350bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
2370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
2380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
2390bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, right, top + mDrawHeight, mPaint);
2400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            left += 40.0f + mDrawWidth;
2420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            right += 40.0f + mDrawWidth;
2430bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top -= 40.0f + mDrawHeight;
2440bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom -= 40.0f + mDrawHeight;
2450bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2460bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
2470bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(180);
2480bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, bottom);
2490bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
2500bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, bottom - mDrawHeight, right, bottom, mPaint);
2510bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2520bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top += 40.0f + mDrawHeight;
2530bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom += 40.0f + mDrawHeight;
2540bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2550bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
2560bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(-90);
2570bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
2580bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
2590bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, left + mDrawWidth, bottom, mPaint);
2600bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2610bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.restore();
2620bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
2630bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
2640bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy}
265