/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.test.hwui; import android.animation.ObjectAnimator; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; import android.graphics.Color; import android.graphics.Paint; import android.graphics.drawable.ColorDrawable; import android.os.Bundle; import android.view.View; import android.widget.FrameLayout; @SuppressWarnings({"UnusedDeclaration"}) public class Lines2Activity extends Activity { private ObjectAnimator mAnimator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000)); FrameLayout frame = new FrameLayout(this); final LinesView gpuView = new LinesView(this, 0, Color.GREEN); frame.addView(gpuView); final LinesView swView = new LinesView(this, 400, Color.RED); swView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); frame.addView(swView); final LinesView hwBothView = new LinesView(this, 850, Color.GREEN); // Don't actually need to render to a hw layer, but it's a good sanity-check that // we're rendering to/from layers correctly hwBothView.setLayerType(View.LAYER_TYPE_HARDWARE, null); frame.addView(hwBothView); final LinesView swBothView = new LinesView(this, 854, Color.RED); swBothView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); frame.addView(swBothView); setContentView(frame); } @Override protected void onDestroy() { super.onDestroy(); } public static class LinesView extends View { private float mOffset; private int mColor; private float[] basePoints = { 120, 0, 120, 20, 120, 20, 125, 0, 130, 0, 132, 10 }; private float[] copyPoints = new float[12]; public LinesView(Context c, float offset, int color) { super(c); mOffset = offset; mColor = color; } private void drawLines(Canvas canvas, Paint p, float xOffset, float yOffset) { canvas.drawLine(10 + xOffset, yOffset, 10 + xOffset, 40 + yOffset, p); canvas.drawLine(30 + xOffset, yOffset, 40 + xOffset, 40 + yOffset, p); canvas.drawLine(40 + xOffset, yOffset, 75 + xOffset, 35 + yOffset, p); canvas.drawLine(50 + xOffset, 5+ yOffset, 100 + xOffset, 15 + yOffset, p); canvas.drawLine(60 + xOffset, yOffset, 110 + xOffset, 2 + yOffset, p); canvas.drawLine(60 + xOffset, 40 + yOffset, 110 + xOffset, 40 + yOffset, p); for (int i = 0; i < 12; i += 2) { copyPoints[i] = basePoints[i] + xOffset; copyPoints[i+1] = basePoints[i+1] + yOffset; } canvas.drawLines(copyPoints, 0, 12, p); } private void drawVerticalLine(Canvas canvas, Paint p, float length, float x, float y) { canvas.drawLine(x, y, x, y + length, p); } private void drawDiagonalLine(Canvas canvas, Paint p, float length, float x, float y) { canvas.drawLine(x, y, x + length, y + length, p); } @Override protected void onDraw(Canvas canvas) { super.onDraw(canvas); Paint p = new Paint(); p.setColor(mColor); float yOffset = 10; canvas.save(); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); yOffset +=100; canvas.save(); p.setStrokeWidth(1); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); yOffset += 100; canvas.save(); p.setStrokeWidth(2); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); p.setAntiAlias(true); p.setStrokeWidth(0); yOffset += 100; canvas.save(); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); yOffset += 100; canvas.save(); p.setStrokeWidth(1); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); yOffset += 100; canvas.save(); p.setStrokeWidth(2); drawLines(canvas, p, mOffset, yOffset); canvas.scale(2, 2); canvas.translate(60, 0); drawLines(canvas, p, mOffset/2, yOffset/2); canvas.restore(); yOffset += 100; canvas.save(); p.setStrokeWidth(1); float x = 10 + mOffset; for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); drawVerticalLine(canvas, p, length, x, yOffset); x += 5; p.setAntiAlias(true); drawVerticalLine(canvas, p, length, x, yOffset); x += 5; } p.setStrokeWidth(5); for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); drawVerticalLine(canvas, p, length, x, yOffset); x += 10; p.setAntiAlias(true); drawVerticalLine(canvas, p, length, x, yOffset); x += 10; } canvas.restore(); yOffset += 20; canvas.save(); p.setStrokeWidth(1); x = 10 + mOffset; for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); drawDiagonalLine(canvas, p, length, x, yOffset); x += 5; p.setAntiAlias(true); drawDiagonalLine(canvas, p, length, x, yOffset); x += 5; } p.setStrokeWidth(2); for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); drawDiagonalLine(canvas, p, length, x, yOffset); x += 10; p.setAntiAlias(true); drawDiagonalLine(canvas, p, length, x, yOffset); x += 10; } canvas.restore(); yOffset += 20; canvas.save(); p.setStrokeWidth(1); x = 10 + mOffset; for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); x += 5; p.setAntiAlias(true); canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); x += 5; } p.setStrokeWidth(2); for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); x += 10; p.setAntiAlias(true); canvas.drawLine(x, yOffset, x + 1, yOffset + length, p); x += 10; } canvas.restore(); yOffset += 20; canvas.save(); p.setStrokeWidth(1); x = 10 + mOffset; for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); x += 5; p.setAntiAlias(true); canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); x += 5; } p.setStrokeWidth(2); for (float length = 1; length <= 10; length +=1 ) { p.setAntiAlias(false); canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); x += 10; p.setAntiAlias(true); canvas.drawLine(x, yOffset, x + length, yOffset + 1, p); x += 10; } canvas.restore(); } } }