1 /*
2  * Copyright (C) 2008 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.os.Bundle;
22 import android.view.View;
23 
24 public class ScaleToFit extends GraphicsActivity {
25 
26     @Override
onCreate(Bundle savedInstanceState)27     protected void onCreate(Bundle savedInstanceState) {
28         super.onCreate(savedInstanceState);
29         setContentView(new SampleView(this));
30     }
31 
32     private static class SampleView extends View {
33         private final Paint   mPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
34         private final Paint   mHairPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
35         private final Paint   mLabelPaint = new Paint(Paint.ANTI_ALIAS_FLAG);
36         private final Matrix  mMatrix = new Matrix();
37         private final RectF   mSrcR = new RectF();
38 
39         private static final Matrix.ScaleToFit[] sFits =
40                 new Matrix.ScaleToFit[] {
41             Matrix.ScaleToFit.FILL,
42             Matrix.ScaleToFit.START,
43             Matrix.ScaleToFit.CENTER,
44             Matrix.ScaleToFit.END
45         };
46 
47         private static final String[] sFitLabels = new String[] {
48             "FILL", "START", "CENTER", "END"
49         };
50 
51         private static final int[] sSrcData = new int[] {
52             80, 40, Color.RED,
53             40, 80, Color.GREEN,
54             30, 30, Color.BLUE,
55             80, 80, Color.BLACK
56         };
57         private static final int N = 4;
58 
59         private static final int WIDTH = 52;
60         private static final int HEIGHT = 52;
61         private final RectF mDstR = new RectF(0, 0, WIDTH, HEIGHT);
62 
SampleView(Context context)63         public SampleView(Context context) {
64             super(context);
65 
66             mHairPaint.setStyle(Paint.Style.STROKE);
67             mLabelPaint.setTextSize(16);
68         }
69 
setSrcR(int index)70         private void setSrcR(int index) {
71             int w = sSrcData[index*3 + 0];
72             int h = sSrcData[index*3 + 1];
73             mSrcR.set(0, 0, w, h);
74         }
75 
drawSrcR(Canvas canvas, int index)76         private void drawSrcR(Canvas canvas, int index) {
77             mPaint.setColor(sSrcData[index*3 + 2]);
78             canvas.drawOval(mSrcR, mPaint);
79         }
80 
drawFit(Canvas canvas, int index, Matrix.ScaleToFit stf)81         private void drawFit(Canvas canvas, int index, Matrix.ScaleToFit stf) {
82             canvas.save();
83 
84             setSrcR(index);
85             mMatrix.setRectToRect(mSrcR, mDstR, stf);
86             canvas.concat(mMatrix);
87             drawSrcR(canvas, index);
88 
89             canvas.restore();
90 
91             canvas.drawRect(mDstR, mHairPaint);
92         }
93 
94         @Override
onDraw(Canvas canvas)95         protected void onDraw(Canvas canvas) {
96             canvas.drawColor(Color.WHITE);
97 
98             canvas.translate(10, 10);
99 
100             canvas.save();
101             for (int i = 0; i < N; i++) {
102                 setSrcR(i);
103                 drawSrcR(canvas, i);
104                 canvas.translate(mSrcR.width() + 15, 0);
105             }
106             canvas.restore();
107 
108             canvas.translate(0, 100);
109             for (int j = 0; j < sFits.length; j++) {
110                 canvas.save();
111                 for (int i = 0; i < N; i++) {
112                     drawFit(canvas, i, sFits[j]);
113                     canvas.translate(mDstR.width() + 8, 0);
114                 }
115                 canvas.drawText(sFitLabels[j], 0, HEIGHT*2/3, mLabelPaint);
116                 canvas.restore();
117                 canvas.translate(0, 80);
118             }
119         }
120     }
121 }
122