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