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