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            public void onStopTrackingTouch(SeekBar seekBar) {
55e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
56e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
57e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            public void onStartTrackingTouch(SeekBar seekBar) {
58e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
59e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
60e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
6114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                gradientView.setRotationY((float) progress);
6214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                radialGradientView.setRotationX((float) progress);
6314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                sweepGradientView.setRotationY((float) progress);
6414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                bitmapView.setRotationX((float) progress);
65e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            }
66e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        });
67ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
68e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(shadersView);
69e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(gradientView, new FrameLayout.LayoutParams(
70e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                200, 200, Gravity.CENTER));
7114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
7214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
7314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(220, 0, 0, 0);
7414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(radialGradientView, lp);
7514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
7614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
7714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(440, 0, 0, 0);
7814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(sweepGradientView, lp);
7914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
8014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
8114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        lp.setMargins(220, -220, 0, 0);
8214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        layout.addView(bitmapView, lp);
8314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
84e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        layout.addView(rotateView, new FrameLayout.LayoutParams(
85e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                300, FrameLayout.LayoutParams.WRAP_CONTENT,
86e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
87e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
88e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        setContentView(layout);
89e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy    }
90ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
9114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class BitmapView extends View {
9214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
9314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
9414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        BitmapView(Context c) {
9514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
9614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
9714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
9814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            BitmapShader shader = new BitmapShader(texture, Shader.TileMode.REPEAT,
9914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                    Shader.TileMode.REPEAT);
10014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
10114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(shader);
10214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
10314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
10414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
10514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
10614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
10714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
10814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
10914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
11014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
11114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
11214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
11314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
11414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
11514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
116ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
117e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy    static class GradientView extends View {
118e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        private final Paint mPaint;
119e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
120e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        GradientView(Context c) {
121e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super(c);
122e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
123e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            LinearGradient gradient = new LinearGradient(0, 0, 200, 0, 0xFF000000, 0,
124e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy                    Shader.TileMode.CLAMP);
125e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            mPaint = new Paint();
126e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            mPaint.setShader(gradient);
127e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
128e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
129e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        @Override
130e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
131e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
132e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            setMeasuredDimension(200, 200);
133e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
134e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy
135e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        @Override
136e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        protected void onDraw(Canvas canvas) {
137e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            super.onDraw(canvas);
138e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
139e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy        }
1400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
1410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
14214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class RadialGradientView extends View {
14314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
14414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
14514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        RadialGradientView(Context c) {
14614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
14714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
14814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            RadialGradient gradient = new RadialGradient(0.0f, 0.0f, 100.0f, 0xff000000, 0xffffffff,
14914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy                    Shader.TileMode.MIRROR);
15014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
15114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(gradient);
15214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
15314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
15414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
15514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
15614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
15714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
15814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
15914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
16014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
16114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
16214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
16314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
16414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
16514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
166ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
16714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    static class SweepGradientView extends View {
16814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        private final Paint mPaint;
16914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
17014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        SweepGradientView(Context c) {
17114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super(c);
17214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
173ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet            SweepGradient gradient = new SweepGradient(100.0f, 100.0f, 0xff000000, 0xffffffff);
17414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint = new Paint();
17514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            mPaint.setShader(gradient);
17614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
17714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
17814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
17914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
18014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
18114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            setMeasuredDimension(200, 200);
18214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
18314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy
18414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        @Override
18514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        protected void onDraw(Canvas canvas) {
18614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            super.onDraw(canvas);
18714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
18814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy        }
18914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy    }
190ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
1910bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    static class ShadersView extends View {
1920bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Paint mPaint;
1930bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawWidth;
1940bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawHeight;
1950bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final LinearGradient mGradient;
1967b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy        private final LinearGradient mGradientStops;
1970bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Matrix mMatrix;
1980bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
1990bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        ShadersView(Context c) {
2000bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super(c);
2010bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2020bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawWidth = 200;
2030bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawHeight = 200;
2040bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2050bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
2067b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            mGradientStops = new LinearGradient(0, 0, 0, 1,
2077b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy                    new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF }, null, Shader.TileMode.CLAMP);
2087b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy
2090bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix = new Matrix();
2100bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2110bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mPaint = new Paint();
2120bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
2130bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2140bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        @Override
2150bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        protected void onDraw(Canvas canvas) {
2160bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super.onDraw(canvas);
2170bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRGB(255, 255, 255);
2180bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2190bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            // Gradients
2200bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.save();
2210bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float top = 40.0f;
2220bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float right = 40.0f + mDrawWidth;
2230bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float left = 40.0f;
2240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float bottom = 40.0f + mDrawHeight;
2250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2260bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
2270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(90);
2280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(right, top);
2290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
230ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III            mPaint.setShader(mGradient);
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;
235ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
2360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
2370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
2380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
239ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III            mPaint.setShader(mGradient);
2400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, right, top + mDrawHeight, mPaint);
241ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
2420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            left += 40.0f + mDrawWidth;
2430bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            right += 40.0f + mDrawWidth;
2440bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top -= 40.0f + mDrawHeight;
2450bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom -= 40.0f + mDrawHeight;
2460bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2470bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
2480bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(180);
2490bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, bottom);
2500bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
251ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III            mPaint.setShader(mGradient);
2520bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, bottom - mDrawHeight, right, bottom, mPaint);
2530bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
2540bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top += 40.0f + mDrawHeight;
2550bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom += 40.0f + mDrawHeight;
256ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
2570bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
2580bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(-90);
2590bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
2600bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
261ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III            mPaint.setShader(mGradient);
2620bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, left + mDrawWidth, bottom, mPaint);
263ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet
2647b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            right = left + mDrawWidth;
2657b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            left = 40.0f;
2667b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            top = bottom + 20.0f;
2677b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            bottom = top + 50.0f;
2687b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy
2697b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            mMatrix.setScale(1, mDrawWidth);
2707b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            mMatrix.postRotate(90);
2717b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            mMatrix.postTranslate(right, top);
2727b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            mGradientStops.setLocalMatrix(mMatrix);
273ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III            mPaint.setShader(mGradientStops);
2747b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy            canvas.drawRect(left, top, right, bottom, mPaint);
2757b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy
2760bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.restore();
2770bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
2780bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
2790bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy}
280