Lines2Activity.java revision 5b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82
15b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase/*
25b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * Copyright (C) 2011 The Android Open Source Project
35b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase *
45b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * Licensed under the Apache License, Version 2.0 (the "License");
55b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * you may not use this file except in compliance with the License.
65b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * You may obtain a copy of the License at
75b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase *
85b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase *      http://www.apache.org/licenses/LICENSE-2.0
95b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase *
105b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * Unless required by applicable law or agreed to in writing, software
115b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * distributed under the License is distributed on an "AS IS" BASIS,
125b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
135b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * See the License for the specific language governing permissions and
145b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase * limitations under the License.
155b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase */
165b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
175b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasepackage com.android.test.hwui;
185b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
195b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.animation.ObjectAnimator;
205b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.app.Activity;
215b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.content.Context;
225b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.graphics.Canvas;
235b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.graphics.Color;
245b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.graphics.Paint;
255b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.graphics.drawable.ColorDrawable;
265b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.os.Bundle;
275b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.view.View;
285b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haaseimport android.widget.FrameLayout;
295b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
305b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase@SuppressWarnings({"UnusedDeclaration"})
315b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haasepublic class Lines2Activity extends Activity {
325b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    private ObjectAnimator mAnimator;
335b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
345b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    @Override
355b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    protected void onCreate(Bundle savedInstanceState) {
365b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        super.onCreate(savedInstanceState);
375b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        getWindow().setBackgroundDrawable(new ColorDrawable(0xff000000));
385b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        FrameLayout frame = new FrameLayout(this);
395b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        final LinesView gpuView = new LinesView(this, 0, Color.GREEN);
405b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        frame.addView(gpuView);
415b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        final LinesView swView = new LinesView(this, 400, Color.RED);
425b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        swView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
435b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        frame.addView(swView);
445b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        final LinesView hwBothView = new LinesView(this, 850, Color.GREEN);
455b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        // BUG: some lines not drawn or drawn with alpha when enabling hw layers
465b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase//        hwBothView.setLayerType(View.LAYER_TYPE_HARDWARE, null);
475b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        frame.addView(hwBothView);
485b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        final LinesView swBothView = new LinesView(this, 854, Color.RED);
495b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        swBothView.setLayerType(View.LAYER_TYPE_SOFTWARE, null);
505b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        frame.addView(swBothView);
515b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        setContentView(frame);
525b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    }
535b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
545b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    @Override
555b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    protected void onDestroy() {
565b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        super.onDestroy();
575b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    }
585b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
595b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    public static class LinesView extends View {
605b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
615b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private float mOffset;
625b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private int mColor;
635b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private float[] basePoints = {
645b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase                120, 0, 120, 20, 120, 20, 125, 0, 130, 0, 132, 10
655b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        };
665b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private float[] copyPoints = new float[12];
675b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
685b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        public LinesView(Context c, float offset, int color) {
695b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            super(c);
705b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            mOffset = offset;
715b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            mColor = color;
725b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        }
735b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
745b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        private void drawLines(Canvas canvas, Paint p, float xOffset, float yOffset) {
755b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(10 + xOffset, yOffset, 10 + xOffset, 40 + yOffset, p);
765b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(30 + xOffset, yOffset, 40 + xOffset, 40 + yOffset, p);
775b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(40 + xOffset, yOffset, 75 + xOffset, 35 + yOffset, p);
785b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(50 + xOffset, 5+ yOffset, 100 + xOffset, 15 + yOffset, p);
795b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(60 + xOffset, yOffset, 110 + xOffset, 2 + yOffset, p);
805b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLine(60 + xOffset, 40 + yOffset, 110 + xOffset, 40 + yOffset, p);
815b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            for (int i = 0; i < 12; i += 2) {
825b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase                copyPoints[i] = basePoints[i] + xOffset;
835b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase                copyPoints[i+1] = basePoints[i+1] + yOffset;
845b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            }
855b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.drawLines(copyPoints, 0, 12, p);
865b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        }
875b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
885b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        @Override
895b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        protected void onDraw(Canvas canvas) {
905b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            super.onDraw(canvas);
915b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            Paint p = new Paint();
925b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setColor(mColor);
935b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            float yOffset = 10;
945b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
955b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
965b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
975b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
985b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
995b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1005b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1015b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
1025b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            yOffset +=100;
1035b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
1045b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setStrokeWidth(1);
1055b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
1065b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
1075b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
1085b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1095b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1105b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
1115b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            yOffset += 100;
1125b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
1135b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setStrokeWidth(2);
1145b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
1155b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
1165b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
1175b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1185b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1195b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
1205b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setAntiAlias(true);
1215b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setStrokeWidth(0);
1225b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            yOffset += 100;
1235b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
1245b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
1255b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
1265b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
1275b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1285b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1295b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
1305b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            yOffset += 100;
1315b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
1325b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setStrokeWidth(1);
1335b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
1345b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
1355b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
1365b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1375b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1385b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase
1395b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            yOffset += 100;
1405b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.save();
1415b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            p.setStrokeWidth(2);
1425b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset, yOffset);
1435b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.scale(2, 2);
1445b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.translate(60, 0);
1455b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            drawLines(canvas, p, mOffset/2, yOffset/2);
1465b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase            canvas.restore();
1475b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase        }
1485b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase    }
1495b0200bd47e8a9a4dc8d2e6c3a110d522b30bf82Chet Haase}
150