1 /* 2 * Copyright (C) 2007 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.example.android.apis.graphics; 18 19 import android.content.Context; 20 import android.graphics.*; 21 import android.graphics.drawable.*; 22 import android.os.Bundle; 23 import android.view.*; 24 25 public class RoundRects extends GraphicsActivity { 26 27 @Override onCreate(Bundle savedInstanceState)28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(new SampleView(this)); 31 } 32 33 private static class SampleView extends View { 34 private Path mPath; 35 private Paint mPaint; 36 private Rect mRect; 37 private GradientDrawable mDrawable; 38 SampleView(Context context)39 public SampleView(Context context) { 40 super(context); 41 setFocusable(true); 42 43 mPath = new Path(); 44 mPaint = new Paint(Paint.ANTI_ALIAS_FLAG); 45 mRect = new Rect(0, 0, 120, 120); 46 47 mDrawable = new GradientDrawable(GradientDrawable.Orientation.TL_BR, 48 new int[] { 0xFFFF0000, 0xFF00FF00, 49 0xFF0000FF }); 50 mDrawable.setShape(GradientDrawable.RECTANGLE); 51 mDrawable.setGradientRadius((float)(Math.sqrt(2) * 60)); 52 } 53 setCornerRadii(GradientDrawable drawable, float r0, float r1, float r2, float r3)54 static void setCornerRadii(GradientDrawable drawable, float r0, 55 float r1, float r2, float r3) { 56 drawable.setCornerRadii(new float[] { r0, r0, r1, r1, 57 r2, r2, r3, r3 }); 58 } 59 onDraw(Canvas canvas)60 @Override protected void onDraw(Canvas canvas) { 61 62 mDrawable.setBounds(mRect); 63 64 float r = 16; 65 66 canvas.save(); 67 canvas.translate(10, 10); 68 mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT); 69 setCornerRadii(mDrawable, r, r, 0, 0); 70 mDrawable.draw(canvas); 71 canvas.restore(); 72 73 canvas.save(); 74 canvas.translate(10 + mRect.width() + 10, 10); 75 mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT); 76 setCornerRadii(mDrawable, 0, 0, r, r); 77 mDrawable.draw(canvas); 78 canvas.restore(); 79 80 canvas.translate(0, mRect.height() + 10); 81 82 canvas.save(); 83 canvas.translate(10, 10); 84 mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT); 85 setCornerRadii(mDrawable, 0, r, r, 0); 86 mDrawable.draw(canvas); 87 canvas.restore(); 88 89 canvas.save(); 90 canvas.translate(10 + mRect.width() + 10, 10); 91 mDrawable.setGradientType(GradientDrawable.LINEAR_GRADIENT); 92 setCornerRadii(mDrawable, r, 0, 0, r); 93 mDrawable.draw(canvas); 94 canvas.restore(); 95 96 canvas.translate(0, mRect.height() + 10); 97 98 canvas.save(); 99 canvas.translate(10, 10); 100 mDrawable.setGradientType(GradientDrawable.RADIAL_GRADIENT); 101 setCornerRadii(mDrawable, r, 0, r, 0); 102 mDrawable.draw(canvas); 103 canvas.restore(); 104 105 canvas.save(); 106 canvas.translate(10 + mRect.width() + 10, 10); 107 mDrawable.setGradientType(GradientDrawable.SWEEP_GRADIENT); 108 setCornerRadii(mDrawable, 0, r, 0, r); 109 mDrawable.draw(canvas); 110 canvas.restore(); 111 } 112 } 113 } 114