GradientsActivity.java revision 7b5b6abf852c039983eded25ebe43a70fef5a4ab
164d85d0d827489c514f6aec075482563c80cda73Joe Onorato/*
264d85d0d827489c514f6aec075482563c80cda73Joe Onorato * Copyright (C) 2010 The Android Open Source Project
364d85d0d827489c514f6aec075482563c80cda73Joe Onorato *
464d85d0d827489c514f6aec075482563c80cda73Joe Onorato * Licensed under the Apache License, Version 2.0 (the "License");
564d85d0d827489c514f6aec075482563c80cda73Joe Onorato * you may not use this file except in compliance with the License.
664d85d0d827489c514f6aec075482563c80cda73Joe Onorato * You may obtain a copy of the License at
764d85d0d827489c514f6aec075482563c80cda73Joe Onorato *
864d85d0d827489c514f6aec075482563c80cda73Joe Onorato *      http://www.apache.org/licenses/LICENSE-2.0
964d85d0d827489c514f6aec075482563c80cda73Joe Onorato *
1064d85d0d827489c514f6aec075482563c80cda73Joe Onorato * Unless required by applicable law or agreed to in writing, software
1164d85d0d827489c514f6aec075482563c80cda73Joe Onorato * distributed under the License is distributed on an "AS IS" BASIS,
1264d85d0d827489c514f6aec075482563c80cda73Joe Onorato * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1364d85d0d827489c514f6aec075482563c80cda73Joe Onorato * See the License for the specific language governing permissions and
1464d85d0d827489c514f6aec075482563c80cda73Joe Onorato * limitations under the License.
1564d85d0d827489c514f6aec075482563c80cda73Joe Onorato */
1664d85d0d827489c514f6aec075482563c80cda73Joe Onorato
1764d85d0d827489c514f6aec075482563c80cda73Joe Onoratopackage com.android.test.hwui;
1864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
1964d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.app.Activity;
2064d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.content.Context;
2164d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.graphics.Bitmap;
2264d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.graphics.BitmapFactory;
2364d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.graphics.BitmapShader;
2464d85d0d827489c514f6aec075482563c80cda73Joe Onoratoimport android.graphics.Canvas;
2513d6950ef806f86f25490385c95364d886cc3a60Ying Wangimport android.graphics.LinearGradient;
2688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.graphics.RadialGradient;
2713d6950ef806f86f25490385c95364d886cc3a60Ying Wangimport android.graphics.Matrix;
2888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.graphics.Paint;
2988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.graphics.Shader;
3088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.graphics.SweepGradient;
3188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.os.Bundle;
3288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.view.Gravity;
3388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.view.View;
3488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.widget.FrameLayout;
3588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectimport android.widget.SeekBar;
3688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
3764d85d0d827489c514f6aec075482563c80cda73Joe Onorato@SuppressWarnings({"UnusedDeclaration"})
3888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Projectpublic class GradientsActivity extends Activity {
3988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    @Override
4088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    protected void onCreate(Bundle savedInstanceState) {
4188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        super.onCreate(savedInstanceState);
4288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
4388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final FrameLayout layout = new FrameLayout(this);
44d77248ac7e1c05d7e5c16dd6df7e2067a2791e7bDirk Dougherty
4588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final ShadersView shadersView = new ShadersView(this);
4688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final GradientView gradientView = new GradientView(this);
4788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final RadialGradientView radialGradientView = new RadialGradientView(this);
4888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final SweepGradientView sweepGradientView = new SweepGradientView(this);
4988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final BitmapView bitmapView = new BitmapView(this);
5088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
5188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        final SeekBar rotateView = new SeekBar(this);
5288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        rotateView.setMax(360);
5388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        rotateView.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
54584d8adbea958ef8dca0e3d85b0beeff4d70d5feYing Wang            public void onStopTrackingTouch(SeekBar seekBar) {
55584d8adbea958ef8dca0e3d85b0beeff4d70d5feYing Wang            }
56ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang
57ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang            public void onStartTrackingTouch(SeekBar seekBar) {
58ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang            }
59ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang
60584d8adbea958ef8dca0e3d85b0beeff4d70d5feYing Wang            public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
6188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project                gradientView.setRotationY((float) progress);
623f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang                radialGradientView.setRotationX((float) progress);
630ec188f1c197709cf61d0de647b5220539b97322Ying Wang                sweepGradientView.setRotationY((float) progress);
640ec188f1c197709cf61d0de647b5220539b97322Ying Wang                bitmapView.setRotationX((float) progress);
653f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang            }
66584d8adbea958ef8dca0e3d85b0beeff4d70d5feYing Wang        });
67efb935800bce97abe0938270ba4c9cd3af6fb7b9Ying Wang
68efb935800bce97abe0938270ba4c9cd3af6fb7b9Ying Wang        layout.addView(shadersView);
69efb935800bce97abe0938270ba4c9cd3af6fb7b9Ying Wang        layout.addView(gradientView, new FrameLayout.LayoutParams(
703f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang                200, 200, Gravity.CENTER));
713f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang
72584d8adbea958ef8dca0e3d85b0beeff4d70d5feYing Wang        FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
733f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang        lp.setMargins(220, 0, 0, 0);
743f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang        layout.addView(radialGradientView, lp);
7514c975b830aa764272bb76aa207b5dbf15fe422eYing Wang
76b1dafb18045274e8a7ec45360010ddf824483dcfBrian Carlstrom        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
773f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang        lp.setMargins(440, 0, 0, 0);
783f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang        layout.addView(sweepGradientView, lp);
793f45b3c35c41d71288dc4939cb48456dda26f8c0Ying Wang
80ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang        lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER);
81ad7809bba403f3cf4f8bc5d859a2f9b959159f82Ying Wang        lp.setMargins(220, -220, 0, 0);
828578cab0667cf3a3da263d838e29b07060af9ba7Ying Wang        layout.addView(bitmapView, lp);
8388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
8488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        layout.addView(rotateView, new FrameLayout.LayoutParams(
8588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project                300, FrameLayout.LayoutParams.WRAP_CONTENT,
8688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project                Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM));
87fb790877a0dc0c1c10e368e00af28114d2f2a967Ying Wang
8864d85d0d827489c514f6aec075482563c80cda73Joe Onorato        setContentView(layout);
8964d85d0d827489c514f6aec075482563c80cda73Joe Onorato    }
9088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
9188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    static class BitmapView extends View {
92fb790877a0dc0c1c10e368e00af28114d2f2a967Ying Wang        private final Paint mPaint;
93fb790877a0dc0c1c10e368e00af28114d2f2a967Ying Wang
9464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        BitmapView(Context c) {
9564d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super(c);
9664d85d0d827489c514f6aec075482563c80cda73Joe Onorato
9764d85d0d827489c514f6aec075482563c80cda73Joe Onorato            Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
9864d85d0d827489c514f6aec075482563c80cda73Joe Onorato            BitmapShader shader = new BitmapShader(texture, Shader.TileMode.REPEAT,
9988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project                    Shader.TileMode.REPEAT);
10088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mPaint = new Paint();
10164d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mPaint.setShader(shader);
10264d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
10364d85d0d827489c514f6aec075482563c80cda73Joe Onorato
10464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
10564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
10664d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
10764d85d0d827489c514f6aec075482563c80cda73Joe Onorato            setMeasuredDimension(200, 200);
10864d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
10964d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11064d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
11164d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onDraw(Canvas canvas) {
11264d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super.onDraw(canvas);
11364d85d0d827489c514f6aec075482563c80cda73Joe Onorato            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
11464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
11564d85d0d827489c514f6aec075482563c80cda73Joe Onorato    }
11664d85d0d827489c514f6aec075482563c80cda73Joe Onorato
11764d85d0d827489c514f6aec075482563c80cda73Joe Onorato    static class GradientView extends View {
11864d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final Paint mPaint;
11964d85d0d827489c514f6aec075482563c80cda73Joe Onorato
12064d85d0d827489c514f6aec075482563c80cda73Joe Onorato        GradientView(Context c) {
12164d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super(c);
12264d85d0d827489c514f6aec075482563c80cda73Joe Onorato
12364d85d0d827489c514f6aec075482563c80cda73Joe Onorato            LinearGradient gradient = new LinearGradient(0, 0, 200, 0, 0xFF000000, 0,
12464d85d0d827489c514f6aec075482563c80cda73Joe Onorato                    Shader.TileMode.CLAMP);
12564d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mPaint = new Paint();
12664d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mPaint.setShader(gradient);
12764d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
12864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
12964d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
13064d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
1311034455a245bf4d6f0c5d8b32f754a686d46af83Ben Dodson            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
13264d85d0d827489c514f6aec075482563c80cda73Joe Onorato            setMeasuredDimension(200, 200);
1331034455a245bf4d6f0c5d8b32f754a686d46af83Ben Dodson        }
13464d85d0d827489c514f6aec075482563c80cda73Joe Onorato
13564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
13688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        protected void onDraw(Canvas canvas) {
13788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            super.onDraw(canvas);
13888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
13988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        }
1403bb5d8bca77592fcbbf8e40fba561eaadb4f91c6Ying Wang    }
1413bb5d8bca77592fcbbf8e40fba561eaadb4f91c6Ying Wang
14288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    static class RadialGradientView extends View {
1439a0e98ac478d8ca61011556e22af13e05d94f8e0Bill Napier        private final Paint mPaint;
1443bb5d8bca77592fcbbf8e40fba561eaadb4f91c6Ying Wang
14588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        RadialGradientView(Context c) {
1463bb5d8bca77592fcbbf8e40fba561eaadb4f91c6Ying Wang            super(c);
14788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1489c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty            RadialGradient gradient = new RadialGradient(0.0f, 0.0f, 100.0f, 0xff000000, 0xffffffff,
1499c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty                    Shader.TileMode.MIRROR);
1509c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty            mPaint = new Paint();
1519c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty            mPaint.setShader(gradient);
1529c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty        }
15388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
15464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
15564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
15688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
157f58df74f6afdac727aa059824adc688ef08b602cJoe Onorato            setMeasuredDimension(200, 200);
15888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        }
159b8a256a1facdae5b803335daf3c02af159749ab4Ying Wang
16064d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
16164d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onDraw(Canvas canvas) {
16288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            super.onDraw(canvas);
16364d85d0d827489c514f6aec075482563c80cda73Joe Onorato            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
16434e3e170e4f9c2f5e4bf7721de8562b189c3c16bYing Wang        }
16588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project    }
16686175d2fd50ef1649cc779234189d3098537fce2Dominic Binks
1675b6b46459cc5873aec9d5aca5f08416d8025ab76Ying Wang    static class SweepGradientView extends View {
16888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        private final Paint mPaint;
16988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
1701034455a245bf4d6f0c5d8b32f754a686d46af83Ben Dodson        SweepGradientView(Context c) {
17188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            super(c);
17288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            SweepGradient gradient = new SweepGradient(100.0f, 100.0f, 0xff000000, 0xffffffff);
1749c2336e073cef13a5237965dc7d5fcdb0091be34Dirk Dougherty            mPaint = new Paint();
1757b142da3ce3849e56134666566df3f04f033c57dYing Wang            mPaint.setShader(gradient);
17688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        }
17788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
17888b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        @Override
17988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
18088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            super.onMeasure(widthMeasureSpec, heightMeasureSpec);
18188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            setMeasuredDimension(200, 200);
18288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project        }
18388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
18464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
18564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onDraw(Canvas canvas) {
18664d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super.onDraw(canvas);
18764d85d0d827489c514f6aec075482563c80cda73Joe Onorato            canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint);
18864d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
18964d85d0d827489c514f6aec075482563c80cda73Joe Onorato    }
19064d85d0d827489c514f6aec075482563c80cda73Joe Onorato
19164d85d0d827489c514f6aec075482563c80cda73Joe Onorato    static class ShadersView extends View {
19264d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final Paint mPaint;
19364d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final float mDrawWidth;
194b8a256a1facdae5b803335daf3c02af159749ab4Ying Wang        private final float mDrawHeight;
19564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final LinearGradient mGradient;
19664d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final LinearGradient mGradientStops;
19764d85d0d827489c514f6aec075482563c80cda73Joe Onorato        private final Matrix mMatrix;
19864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
19934e3e170e4f9c2f5e4bf7721de8562b189c3c16bYing Wang        ShadersView(Context c) {
20064d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super(c);
20164d85d0d827489c514f6aec075482563c80cda73Joe Onorato
20224de9707485f8621dd22d3cc843db1d7218a744aYing Wang            mDrawWidth = 200;
2035b6b46459cc5873aec9d5aca5f08416d8025ab76Ying Wang            mDrawHeight = 200;
20464d85d0d827489c514f6aec075482563c80cda73Joe Onorato
20564d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mGradient = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
206f122d41b7511fd1b21162d1968a9aac5ff31a059Narayan Kamath            mGradientStops = new LinearGradient(0, 0, 0, 1,
20764d85d0d827489c514f6aec075482563c80cda73Joe Onorato                    new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF }, null, Shader.TileMode.CLAMP);
20864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
20964d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mMatrix = new Matrix();
21064d85d0d827489c514f6aec075482563c80cda73Joe Onorato
21164d85d0d827489c514f6aec075482563c80cda73Joe Onorato            mPaint = new Paint();
21264d85d0d827489c514f6aec075482563c80cda73Joe Onorato        }
21364d85d0d827489c514f6aec075482563c80cda73Joe Onorato
21464d85d0d827489c514f6aec075482563c80cda73Joe Onorato        @Override
21564d85d0d827489c514f6aec075482563c80cda73Joe Onorato        protected void onDraw(Canvas canvas) {
21664d85d0d827489c514f6aec075482563c80cda73Joe Onorato            super.onDraw(canvas);
21764d85d0d827489c514f6aec075482563c80cda73Joe Onorato            canvas.drawRGB(255, 255, 255);
21864d85d0d827489c514f6aec075482563c80cda73Joe Onorato
21964d85d0d827489c514f6aec075482563c80cda73Joe Onorato            // Gradients
22064d85d0d827489c514f6aec075482563c80cda73Joe Onorato            canvas.save();
22164d85d0d827489c514f6aec075482563c80cda73Joe Onorato            float top = 40.0f;
22288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            float right = 40.0f + mDrawWidth;
22388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            float left = 40.0f;
22488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            float bottom = 40.0f + mDrawHeight;
22588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
22688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mPaint.setShader(mGradient);
227aaa5d11cb3c67a345572496197c688c3e48cd670Joe Onorato
228aaa5d11cb3c67a345572496197c688c3e48cd670Joe Onorato            mMatrix.setScale(1, mDrawWidth);
22988b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mMatrix.postRotate(90);
23088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mMatrix.postTranslate(right, top);
23188b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mGradient.setLocalMatrix(mMatrix);
23288b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            canvas.drawRect(right - mDrawWidth, top, right, top + mDrawHeight, mPaint);
23388b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23488b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            top += 40.0f + mDrawHeight;
23588b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            bottom += 40.0f + mDrawHeight;
23688b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project
23788b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            mMatrix.setScale(1, mDrawHeight);
23836b89ff93fe1fe55351564c258023255d70b6378Joe Onorato            mMatrix.postTranslate(left, top);
23936b89ff93fe1fe55351564c258023255d70b6378Joe Onorato            mGradient.setLocalMatrix(mMatrix);
24088b607994a148f4af5bffee163e39ce8296750c6The Android Open Source Project            canvas.drawRect(left, top, right, top + mDrawHeight, mPaint);
241aaa5d11cb3c67a345572496197c688c3e48cd670Joe Onorato
242aaa5d11cb3c67a345572496197c688c3e48cd670Joe Onorato            left += 40.0f + mDrawWidth;
243            right += 40.0f + mDrawWidth;
244            top -= 40.0f + mDrawHeight;
245            bottom -= 40.0f + mDrawHeight;
246
247            mMatrix.setScale(1, mDrawHeight);
248            mMatrix.postRotate(180);
249            mMatrix.postTranslate(left, bottom);
250            mGradient.setLocalMatrix(mMatrix);
251            canvas.drawRect(left, bottom - mDrawHeight, right, bottom, mPaint);
252
253            top += 40.0f + mDrawHeight;
254            bottom += 40.0f + mDrawHeight;
255
256            mMatrix.setScale(1, mDrawWidth);
257            mMatrix.postRotate(-90);
258            mMatrix.postTranslate(left, top);
259            mGradient.setLocalMatrix(mMatrix);
260            canvas.drawRect(left, top, left + mDrawWidth, bottom, mPaint);
261
262            right = left + mDrawWidth;
263            left = 40.0f;
264            top = bottom + 20.0f;
265            bottom = top + 50.0f;
266
267            mPaint.setShader(mGradientStops);
268
269            mMatrix.setScale(1, mDrawWidth);
270            mMatrix.postRotate(90);
271            mMatrix.postTranslate(right, top);
272            mGradientStops.setLocalMatrix(mMatrix);
273            canvas.drawRect(left, top, right, bottom, mPaint);
274
275            canvas.restore();
276        }
277    }
278}
279