GradientsActivity.java revision 0bb5667b4ef91fefd0500fae0186789d15d54e0e
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;
210bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Canvas;
220bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.LinearGradient;
230bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Matrix;
240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Paint;
250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Shader;
260bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.os.Bundle;
270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.view.View;
280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy@SuppressWarnings({"UnusedDeclaration"})
300bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guypublic class GradientsActivity extends Activity {
310bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    @Override
320bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    protected void onCreate(Bundle savedInstanceState) {
330bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        super.onCreate(savedInstanceState);
340bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
350bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        setContentView(new ShadersView(this));
360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    static class ShadersView extends View {
390bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Paint mPaint;
400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawWidth;
410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final float mDrawHeight;
420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final LinearGradient mGradient;
430bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        private final Matrix mMatrix;
440bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
450bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        ShadersView(Context c) {
460bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super(c);
470bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
480bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawWidth = 200;
490bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mDrawHeight = 200;
500bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
510bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP);
520bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix = new Matrix();
530bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
540bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mPaint = new Paint();
550bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
560bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
570bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        @Override
580bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        protected void onDraw(Canvas canvas) {
590bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            super.onDraw(canvas);
600bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRGB(255, 255, 255);
610bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
620bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            // Gradients
630bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.save();
640bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float top = 40.0f;
650bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float right = 40.0f + mDrawWidth;
660bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float left = 40.0f;
670bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            float bottom = 40.0f + mDrawHeight;
680bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
690bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mPaint.setShader(mGradient);
700bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
710bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
720bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(90);
730bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(right, top);
740bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
750bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(right - mDrawWidth, top, right, top + mDrawHeight, mPaint);
760bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
770bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top += 40.0f + mDrawHeight;
780bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom += 40.0f + mDrawHeight;
790bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
800bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
810bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
820bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
830bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, right, top + mDrawHeight, mPaint);
840bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
850bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            left += 40.0f + mDrawWidth;
860bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            right += 40.0f + mDrawWidth;
870bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top -= 40.0f + mDrawHeight;
880bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom -= 40.0f + mDrawHeight;
890bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
900bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawHeight);
910bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(180);
920bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, bottom);
930bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
940bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, bottom - mDrawHeight, right, bottom, mPaint);
950bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
960bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            top += 40.0f + mDrawHeight;
970bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            bottom += 40.0f + mDrawHeight;
980bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
990bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.setScale(1, mDrawWidth);
1000bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postRotate(-90);
1010bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mMatrix.postTranslate(left, top);
1020bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            mGradient.setLocalMatrix(mMatrix);
1030bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.drawRect(left, top, left + mDrawWidth, bottom, mPaint);
1040bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy
1050bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy            canvas.restore();
1060bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy        }
1070bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy    }
1080bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy}
109