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; 2114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.Bitmap; 2214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.BitmapFactory; 2314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.BitmapShader; 240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Canvas; 250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.LinearGradient; 2614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.RadialGradient; 270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Matrix; 280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Paint; 290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.graphics.Shader; 3014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guyimport android.graphics.SweepGradient; 310bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.os.Bundle; 32e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.view.Gravity; 330bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guyimport android.view.View; 34e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.widget.FrameLayout; 35e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guyimport android.widget.SeekBar; 360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy@SuppressWarnings({"UnusedDeclaration"}) 380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guypublic class GradientsActivity extends Activity { 390bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy @Override 400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy protected void onCreate(Bundle savedInstanceState) { 410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy super.onCreate(savedInstanceState); 420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 43e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy final FrameLayout layout = new FrameLayout(this); 4414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 45e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy final ShadersView shadersView = new ShadersView(this); 46e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy final GradientView gradientView = new GradientView(this); 4714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy final RadialGradientView radialGradientView = new RadialGradientView(this); 4814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy final SweepGradientView sweepGradientView = new SweepGradientView(this); 4914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy final BitmapView bitmapView = new BitmapView(this); 5014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 51e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy final SeekBar rotateView = new SeekBar(this); 52e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy rotateView.setMax(360); 53e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy rotateView.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { 54e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy public void onStopTrackingTouch(SeekBar seekBar) { 55e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 56e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 57e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy public void onStartTrackingTouch(SeekBar seekBar) { 58e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 59e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 60e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { 6114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy gradientView.setRotationY((float) progress); 6214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy radialGradientView.setRotationX((float) progress); 6314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy sweepGradientView.setRotationY((float) progress); 6414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy bitmapView.setRotationX((float) progress); 65e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 66e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy }); 67ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 68e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy layout.addView(shadersView); 69e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy layout.addView(gradientView, new FrameLayout.LayoutParams( 70e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 200, 200, Gravity.CENTER)); 7114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 7214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy FrameLayout.LayoutParams lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER); 7314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy lp.setMargins(220, 0, 0, 0); 7414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy layout.addView(radialGradientView, lp); 7514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 7614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER); 7714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy lp.setMargins(440, 0, 0, 0); 7814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy layout.addView(sweepGradientView, lp); 7914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 8014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy lp = new FrameLayout.LayoutParams(200, 200, Gravity.CENTER); 8114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy lp.setMargins(220, -220, 0, 0); 8214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy layout.addView(bitmapView, lp); 8314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 84e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy layout.addView(rotateView, new FrameLayout.LayoutParams( 85e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 300, FrameLayout.LayoutParams.WRAP_CONTENT, 86e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy Gravity.CENTER_HORIZONTAL | Gravity.BOTTOM)); 87e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 88e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy setContentView(layout); 89e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 90ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 9114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy static class BitmapView extends View { 9214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy private final Paint mPaint; 9314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 9414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy BitmapView(Context c) { 9514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super(c); 9614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 9714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy Bitmap texture = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1); 9814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy BitmapShader shader = new BitmapShader(texture, Shader.TileMode.REPEAT, 9914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy Shader.TileMode.REPEAT); 10014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint = new Paint(); 10114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint.setShader(shader); 10214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 10314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 10414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 10514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 10614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onMeasure(widthMeasureSpec, heightMeasureSpec); 10714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy setMeasuredDimension(200, 200); 10814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 10914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 11014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 11114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onDraw(Canvas canvas) { 11214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onDraw(canvas); 11314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint); 11414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 11514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 116ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 117e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy static class GradientView extends View { 118e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy private final Paint mPaint; 119e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 120e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy GradientView(Context c) { 121e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy super(c); 122e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 123e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy LinearGradient gradient = new LinearGradient(0, 0, 200, 0, 0xFF000000, 0, 124e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy Shader.TileMode.CLAMP); 125e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy mPaint = new Paint(); 126e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy mPaint.setShader(gradient); 127e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 128e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 129e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy @Override 130e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 131e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy super.onMeasure(widthMeasureSpec, heightMeasureSpec); 132e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy setMeasuredDimension(200, 200); 133e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 134e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy 135e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy @Override 136e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy protected void onDraw(Canvas canvas) { 137e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy super.onDraw(canvas); 138e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint); 139e3095e0c1e2a4a4f34f741aa386eae56536ca5aaRomain Guy } 1400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy } 1410bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 14214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy static class RadialGradientView extends View { 14314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy private final Paint mPaint; 14414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 14514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy RadialGradientView(Context c) { 14614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super(c); 14714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 14814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy RadialGradient gradient = new RadialGradient(0.0f, 0.0f, 100.0f, 0xff000000, 0xffffffff, 14914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy Shader.TileMode.MIRROR); 15014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint = new Paint(); 15114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint.setShader(gradient); 15214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 15314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 15414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 15514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 15614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onMeasure(widthMeasureSpec, heightMeasureSpec); 15714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy setMeasuredDimension(200, 200); 15814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 15914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 16014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 16114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onDraw(Canvas canvas) { 16214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onDraw(canvas); 16314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint); 16414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 16514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 166ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 16714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy static class SweepGradientView extends View { 16814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy private final Paint mPaint; 16914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 17014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy SweepGradientView(Context c) { 17114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super(c); 17214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 173ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet SweepGradient gradient = new SweepGradient(100.0f, 100.0f, 0xff000000, 0xffffffff); 17414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint = new Paint(); 17514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy mPaint.setShader(gradient); 17614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 17714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 17814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 17914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { 18014830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onMeasure(widthMeasureSpec, heightMeasureSpec); 18114830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy setMeasuredDimension(200, 200); 18214830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 18314830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy 18414830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy @Override 18514830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy protected void onDraw(Canvas canvas) { 18614830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy super.onDraw(canvas); 18714830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy canvas.drawRect(0.0f, 0.0f, getWidth(), getHeight(), mPaint); 18814830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 18914830948d02f768c41b97b7a8d15e1b3cab78267Romain Guy } 190ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 1910bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy static class ShadersView extends View { 1920bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy private final Paint mPaint; 1930bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy private final float mDrawWidth; 1940bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy private final float mDrawHeight; 1950bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy private final LinearGradient mGradient; 1967b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy private final LinearGradient mGradientStops; 1970bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy private final Matrix mMatrix; 1980bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 1990bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy ShadersView(Context c) { 2000bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy super(c); 2010bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2020bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mDrawWidth = 200; 2030bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mDrawHeight = 200; 2040bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2050bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mGradient = new LinearGradient(0, 0, 0, 1, 0xFF000000, 0, Shader.TileMode.CLAMP); 2067b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mGradientStops = new LinearGradient(0, 0, 0, 1, 2077b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy new int[] { 0xFFFF0000, 0xFF00FF00, 0xFF0000FF }, null, Shader.TileMode.CLAMP); 2087b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 2090bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix = new Matrix(); 2100bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2110bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mPaint = new Paint(); 2120bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy } 2130bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2140bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy @Override 2150bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy protected void onDraw(Canvas canvas) { 2160bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy super.onDraw(canvas); 2170bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.drawRGB(255, 255, 255); 2180bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2190bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy // Gradients 2200bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.save(); 2210bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy float top = 40.0f; 2220bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy float right = 40.0f + mDrawWidth; 2230bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy float left = 40.0f; 2240bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy float bottom = 40.0f + mDrawHeight; 2250bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2260bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.setScale(1, mDrawWidth); 2270bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postRotate(90); 2280bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postTranslate(right, top); 2290bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mGradient.setLocalMatrix(mMatrix); 230ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III mPaint.setShader(mGradient); 2310bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.drawRect(right - mDrawWidth, top, right, top + mDrawHeight, mPaint); 2320bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2330bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy top += 40.0f + mDrawHeight; 2340bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy bottom += 40.0f + mDrawHeight; 235ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 2360bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.setScale(1, mDrawHeight); 2370bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postTranslate(left, top); 2380bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mGradient.setLocalMatrix(mMatrix); 239ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III mPaint.setShader(mGradient); 2400bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.drawRect(left, top, right, top + mDrawHeight, mPaint); 241ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 2420bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy left += 40.0f + mDrawWidth; 2430bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy right += 40.0f + mDrawWidth; 2440bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy top -= 40.0f + mDrawHeight; 2450bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy bottom -= 40.0f + mDrawHeight; 2460bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2470bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.setScale(1, mDrawHeight); 2480bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postRotate(180); 2490bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postTranslate(left, bottom); 2500bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mGradient.setLocalMatrix(mMatrix); 251ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III mPaint.setShader(mGradient); 2520bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.drawRect(left, bottom - mDrawHeight, right, bottom, mPaint); 2530bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy 2540bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy top += 40.0f + mDrawHeight; 2550bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy bottom += 40.0f + mDrawHeight; 256ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 2570bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.setScale(1, mDrawWidth); 2580bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postRotate(-90); 2590bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mMatrix.postTranslate(left, top); 2600bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy mGradient.setLocalMatrix(mMatrix); 261ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III mPaint.setShader(mGradient); 2620bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.drawRect(left, top, left + mDrawWidth, bottom, mPaint); 263ec31a7f119608b94ea1bb41275811027a360bf30Xavier Ducrohet 2647b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy right = left + mDrawWidth; 2657b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy left = 40.0f; 2667b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy top = bottom + 20.0f; 2677b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy bottom = top + 50.0f; 2687b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 2697b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mMatrix.setScale(1, mDrawWidth); 2707b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mMatrix.postRotate(90); 2717b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mMatrix.postTranslate(right, top); 2727b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy mGradientStops.setLocalMatrix(mMatrix); 273ab87983a11e0bd2e08d752d86d5e945ea7d39a04Leon Scroggins III mPaint.setShader(mGradientStops); 2747b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy canvas.drawRect(left, top, right, bottom, mPaint); 2757b5b6abf852c039983eded25ebe43a70fef5a4abRomain Guy 2760bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy canvas.restore(); 2770bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy } 2780bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy } 2790bb5667b4ef91fefd0500fae0186789d15d54e0eRomain Guy} 280