1 /* 2 * Copyright (C) 2011 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.android.test.hwui; 18 19 import android.animation.ObjectAnimator; 20 import android.app.Activity; 21 import android.content.Context; 22 import android.graphics.Canvas; 23 import android.graphics.Color; 24 import android.graphics.Paint; 25 import android.graphics.drawable.ColorDrawable; 26 import android.os.Bundle; 27 import android.view.View; 28 import android.widget.FrameLayout; 29 30 @SuppressWarnings({"UnusedDeclaration"}) 31 public class Lines2Activity extends Activity { 32 private ObjectAnimator mAnimator; 33 34 @Override onCreate(Bundle savedInstanceState)35 protected void onCreate(Bundle savedInstanceState) { 36 super.onCreate(savedInstanceState); 37 getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000)); 38 FrameLayout frame = new FrameLayout(this); 39 final LinesView gpuView = new LinesView(this, 0, Color.GREEN); 40 frame.addView(gpuView); 41 final LinesView swView = new LinesView(this, 400, Color.RED); 42 swView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 43 frame.addView(swView); 44 final LinesView hwBothView = new LinesView(this, 850, Color.GREEN); 45 // Don't actually need to render to a hw layer, but it's a good sanity-check that 46 // we're rendering to/from layers correctly 47 hwBothView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 48 frame.addView(hwBothView); 49 final LinesView swBothView = new LinesView(this, 854, Color.RED); 50 swBothView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 51 frame.addView(swBothView); 52 setContentView(frame); 53 } 54 55 @Override onDestroy()56 protected void onDestroy() { 57 super.onDestroy(); 58 } 59 60 public static class LinesView extends View { 61 62 private float mOffset; 63 private int mColor; 64 private float[] basePoints = { 65 120, 0, 120, 20, 120, 20, 125, 0, 130, 0, 132, 10 66 }; 67 private float[] copyPoints = new float[12]; 68 LinesView(Context c, float offset, int color)69 public LinesView(Context c, float offset, int color) { 70 super(c); 71 mOffset = offset; 72 mColor = color; 73 } 74 drawLines(Canvas canvas, Paint p, float xOffset, float yOffset)75 private void drawLines(Canvas canvas, Paint p, float xOffset, float yOffset) { 76 canvas.drawLine(10 + xOffset, yOffset, 10 + xOffset, 40 + yOffset, p); 77 canvas.drawLine(30 + xOffset, yOffset, 40 + xOffset, 40 + yOffset, p); 78 canvas.drawLine(40 + xOffset, yOffset, 75 + xOffset, 35 + yOffset, p); 79 canvas.drawLine(50 + xOffset, 5+ yOffset, 100 + xOffset, 15 + yOffset, p); 80 canvas.drawLine(60 + xOffset, yOffset, 110 + xOffset, 2 + yOffset, p); 81 canvas.drawLine(60 + xOffset, 40 + yOffset, 110 + xOffset, 40 + yOffset, p); 82 for (int i = 0; i < 12; i += 2) { 83 copyPoints[i] = basePoints[i] + xOffset; 84 copyPoints[i+1] = basePoints[i+1] + yOffset; 85 } 86 canvas.drawLines(copyPoints, 0, 12, p); 87 } 88 drawVerticalLine(Canvas canvas, Paint p, float length, float x, float y)89 private void drawVerticalLine(Canvas canvas, Paint p, float length, float x, float y) { 90 canvas.drawLine(x, y, x, y + length, p); 91 } 92 drawDiagonalLine(Canvas canvas, Paint p, float length, float x, float y)93 private void drawDiagonalLine(Canvas canvas, Paint p, float length, float x, float y) { 94 canvas.drawLine(x, y, x + length, y + length, p); 95 } 96 97 @Override onDraw(Canvas canvas)98 protected void onDraw(Canvas canvas) { 99 super.onDraw(canvas); 100 Paint p = new Paint(); 101 p.setColor(mColor); 102 float yOffset = 10; 103 104 canvas.save(); 105 drawLines(canvas, p, mOffset, yOffset); 106 canvas.scale(2, 2); 107 canvas.translate(60, 0); 108 drawLines(canvas, p, mOffset/2, yOffset/2); 109 canvas.restore(); 110 111 yOffset +=100; 112 canvas.save(); 113 p.setStrokeWidth(1); 114 drawLines(canvas, p, mOffset, yOffset); 115 canvas.scale(2, 2); 116 canvas.translate(60, 0); 117 drawLines(canvas, p, mOffset/2, yOffset/2); 118 canvas.restore(); 119 120 yOffset += 100; 121 canvas.save(); 122 p.setStrokeWidth(2); 123 drawLines(canvas, p, mOffset, yOffset); 124 canvas.scale(2, 2); 125 canvas.translate(60, 0); 126 drawLines(canvas, p, mOffset/2, yOffset/2); 127 canvas.restore(); 128 129 p.setAntiAlias(true); 130 p.setStrokeWidth(0); 131 yOffset += 100; 132 canvas.save(); 133 drawLines(canvas, p, mOffset, yOffset); 134 canvas.scale(2, 2); 135 canvas.translate(60, 0); 136 drawLines(canvas, p, mOffset/2, yOffset/2); 137 canvas.restore(); 138 139 yOffset += 100; 140 canvas.save(); 141 p.setStrokeWidth(1); 142 drawLines(canvas, p, mOffset, yOffset); 143 canvas.scale(2, 2); 144 canvas.translate(60, 0); 145 drawLines(canvas, p, mOffset/2, yOffset/2); 146 canvas.restore(); 147 148 yOffset += 100; 149 canvas.save(); 150 p.setStrokeWidth(2); 151 drawLines(canvas, p, mOffset, yOffset); 152 canvas.scale(2, 2); 153 canvas.translate(60, 0); 154 drawLines(canvas, p, mOffset/2, yOffset/2); 155 canvas.restore(); 156 157 yOffset += 100; 158 canvas.save(); 159 p.setStrokeWidth(1); 160 float x = 10 + mOffset; 161 for (float length = 1; length <= 10; length +=1 ) { 162 p.setAntiAlias(false); 163 drawVerticalLine(canvas, p, length, x, yOffset); 164 x += 5; 165 p.setAntiAlias(true); 166 drawVerticalLine(canvas, p, length, x, yOffset); 167 x += 5; 168 } 169 p.setStrokeWidth(5); 170 for (float length = 1; length <= 10; length +=1 ) { 171 p.setAntiAlias(false); 172 drawVerticalLine(canvas, p, length, x, yOffset); 173 x += 10; 174 p.setAntiAlias(true); 175 drawVerticalLine(canvas, p, length, x, yOffset); 176 x += 10; 177 } 178 canvas.restore(); 179 180 yOffset += 20; 181 canvas.save(); 182 p.setStrokeWidth(1); 183 x = 10 + mOffset; 184 for (float length = 1; length <= 10; length +=1 ) { 185 p.setAntiAlias(false); 186 drawDiagonalLine(canvas, p, length, x, yOffset); 187 x += 5; 188 p.setAntiAlias(true); 189 drawDiagonalLine(canvas, p, length, x, yOffset); 190 x += 5; 191 } 192 p.setStrokeWidth(2); 193 for (float length = 1; length <= 10; length +=1 ) { 194 p.setAntiAlias(false); 195 drawDiagonalLine(canvas, p, length, x, yOffset); 196 x += 10; 197 p.setAntiAlias(true); 198 drawDiagonalLine(canvas, p, length, x, yOffset); 199 x += 10; 200 } 201 canvas.restore(); 202 203 yOffset += 20; 204 canvas.save(); 205 p.setStrokeWidth(1); 206 x = 10 + mOffset; 207 for (float length = 1; length <= 10; length +=1 ) { 208 p.setAntiAlias(false); 209 canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); 210 x += 5; 211 p.setAntiAlias(true); 212 canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); 213 x += 5; 214 } 215 p.setStrokeWidth(2); 216 for (float length = 1; length <= 10; length +=1 ) { 217 p.setAntiAlias(false); 218 canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); 219 x += 10; 220 p.setAntiAlias(true); 221 canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); 222 x += 10; 223 } 224 canvas.restore(); 225 226 yOffset += 20; 227 canvas.save(); 228 p.setStrokeWidth(1); 229 x = 10 + mOffset; 230 for (float length = 1; length <= 10; length +=1 ) { 231 p.setAntiAlias(false); 232 canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); 233 x += 5; 234 p.setAntiAlias(true); 235 canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); 236 x += 5; 237 } 238 p.setStrokeWidth(2); 239 for (float length = 1; length <= 10; length +=1 ) { 240 p.setAntiAlias(false); 241 canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); 242 x += 10; 243 p.setAntiAlias(true); 244 canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); 245 x += 10; 246 } 247 canvas.restore(); 248 249 } 250 } 251 } 252