1ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy/*
2ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * Copyright (C) 2010 The Android Open Source Project
3ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy *
4ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * Licensed under the Apache License, Version 2.0 (the "License");
5ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * you may not use this file except in compliance with the License.
6ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * You may obtain a copy of the License at
7ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy *
8ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy *      http://www.apache.org/licenses/LICENSE-2.0
9ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy *
10ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * Unless required by applicable law or agreed to in writing, software
11ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * distributed under the License is distributed on an "AS IS" BASIS,
12ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * See the License for the specific language governing permissions and
14ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy * limitations under the License.
15ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy */
16ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
17ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guypackage com.android.test.hwui;
18ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
19ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.app.Activity;
20ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.content.Context;
21ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.Canvas;
22ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.Matrix;
23ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.Paint;
24ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.RadialGradient;
25ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.Shader;
26ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.graphics.SweepGradient;
27ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.os.Bundle;
28ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guyimport android.view.View;
29ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
30ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy@SuppressWarnings({"UnusedDeclaration"})
31ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guypublic class AdvancedGradientsActivity extends Activity {
32ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy    @Override
33ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy    protected void onCreate(Bundle savedInstanceState) {
34ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        super.onCreate(savedInstanceState);
35ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
36ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        setContentView(new GradientsView(this));
37ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy    }
38ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
39ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet    public static class GradientsView extends View {
40ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        private final Paint mPaint;
41ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        private final SweepGradient mSweepGradient;
42ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        private final RadialGradient mRadialGradient;
43ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        private final Matrix mMatrix;
44ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        private final Matrix mMatrix2;
45ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy        private final Matrix mMatrix3;
46ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
47ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet        public GradientsView(Context c) {
48ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            super(c);
49ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
50ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mSweepGradient = new SweepGradient(0.0f, 0.0f, 0xff000000, 0xffffffff);
51ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mRadialGradient = new RadialGradient(0.0f, 0.0f, 100.0f, 0xff000000, 0xffffffff,
52ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy                    Shader.TileMode.MIRROR);
53ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
54ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            mMatrix = new Matrix();
55ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix.setRotate(-45, 0.0f, 0.0f);
56ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix.postTranslate(100.0f, 100.0f);
57ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
58ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            mMatrix2 = new Matrix();
59ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix2.setScale(1.0f, 2.0f);
60ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix2.postRotate(-45, 0.0f, 0.0f);
61ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
62ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix3 = new Matrix();
63ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mMatrix3.setTranslate(100.0f, 100.0f);
64ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
65ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            mPaint = new Paint();
66ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        }
67ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
68ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        @Override
69ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        protected void onDraw(Canvas canvas) {
70ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            super.onDraw(canvas);
71ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.drawRGB(255, 255, 255);
72ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
73ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.save();
74ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.translate(130.0f, 100.0f);
75ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
76ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mSweepGradient.setLocalMatrix(mMatrix3);
77ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            mPaint.setShader(mSweepGradient);
78ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
79ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
80ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.translate(400.0f, 000.0f);
81ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
82ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mSweepGradient.setLocalMatrix(mMatrix);
83ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mPaint.setShader(mSweepGradient);
84ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
85ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
86ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.translate(400.0f, 000.0f);
87ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
88ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mSweepGradient.setLocalMatrix(mMatrix2);
89ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            mPaint.setShader(mSweepGradient);
90ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
91ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
92ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.translate(-800.0f, 300.0f);
93ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
94ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mRadialGradient.setLocalMatrix(null);
95ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mPaint.setShader(mRadialGradient);
96ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
97ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
98ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            canvas.translate(400.0f, 000.0f);
99ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
100ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mRadialGradient.setLocalMatrix(mMatrix);
101ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mPaint.setShader(mRadialGradient);
102ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
103ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
104ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            canvas.translate(400.0f, 000.0f);
105ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy
106ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mRadialGradient.setLocalMatrix(mMatrix2);
107ddb80bebb0776e6d852aab6e8bba5d5591847a55Romain Guy            mPaint.setShader(mRadialGradient);
108ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.drawRect(0.0f, 0.0f, 200.0f, 200.0f, mPaint);
109ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
110ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy
111ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy            canvas.restore();
112ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy        }
113ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy    }
114ee916f14cbd1fe1422c063ce2ef7b185e2bc5c6fRomain Guy}
115