17fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy/*
27fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * Copyright (C) 2010 The Android Open Source Project
37fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy *
47fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * Licensed under the Apache License, Version 2.0 (the "License");
57fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * you may not use this file except in compliance with the License.
67fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * You may obtain a copy of the License at
77fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy *
87fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy *      http://www.apache.org/licenses/LICENSE-2.0
97fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy *
107fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * Unless required by applicable law or agreed to in writing, software
117fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * distributed under the License is distributed on an "AS IS" BASIS,
127fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
137fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * See the License for the specific language governing permissions and
147fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy * limitations under the License.
157fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy */
167fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
17f607bdc167f66b3e7003acaa4736ae46d78c1492Romain Guypackage com.android.test.hwui;
187fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
197fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.app.Activity;
207fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.content.Context;
217fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.Bitmap;
227fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.BitmapFactory;
237fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.BitmapShader;
247fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.Canvas;
257fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.Paint;
267fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.Path;
277fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.graphics.RectF;
287fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.os.Bundle;
297fbcc0492fca03857e3c45064f4aa040af817d55Romain Guyimport android.view.View;
307fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
317fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy@SuppressWarnings({"UnusedDeclaration"})
327fbcc0492fca03857e3c45064f4aa040af817d55Romain Guypublic class PathsActivity extends Activity {
337fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy    @Override
347fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy    protected void onCreate(Bundle savedInstanceState) {
357fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        super.onCreate(savedInstanceState);
367fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        final PathsView view = new PathsView(this);
377fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        setContentView(view);
387fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy    }
397fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
40d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet    public static class PathsView extends View {
417fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Bitmap mBitmap1;
427fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Paint mSmallPaint;
437fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Paint mMediumPaint;
447fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Paint mLargePaint;
457fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final BitmapShader mShader;
467fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Path mPath;
477fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final RectF mPathBounds;
487fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Paint mBoundsPaint;
497fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Bitmap mBitmap;
507fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final float mOffset;
517fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        private final Paint mLinePaint;
527fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
53d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet        public PathsView(Context c) {
547fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            super(c);
557fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
567fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mBitmap1 = BitmapFactory.decodeResource(c.getResources(), R.drawable.sunset1);
577fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
587fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mSmallPaint = new Paint();
597fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mSmallPaint.setAntiAlias(true);
607fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mSmallPaint.setColor(0xffff0000);
617fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mSmallPaint.setStrokeWidth(1.0f);
627fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mSmallPaint.setStyle(Paint.Style.STROKE);
63d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet
647fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLinePaint = new Paint();
657fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLinePaint.setAntiAlias(true);
667fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLinePaint.setColor(0xffff00ff);
677fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLinePaint.setStrokeWidth(1.0f);
687fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLinePaint.setStyle(Paint.Style.STROKE);
697fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
707fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mMediumPaint = new Paint();
717fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mMediumPaint.setAntiAlias(true);
726c319ca1275c8db892c39b48fc54864c949f9171Romain Guy            mMediumPaint.setColor(0xe00000ff);
737fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mMediumPaint.setStrokeWidth(10.0f);
747fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mMediumPaint.setStyle(Paint.Style.STROKE);
757fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
767fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint = new Paint();
777fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setAntiAlias(true);
78740bf2bb2e900d3db2292b5909b4b4c6e90320e6Romain Guy            mLargePaint.setColor(0x7f00ff00);
797fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setStrokeWidth(15.0f);
807fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setStyle(Paint.Style.FILL);
817fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
827fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mShader = new BitmapShader(mBitmap1, BitmapShader.TileMode.MIRROR,
837fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy                    BitmapShader.TileMode.MIRROR);
847fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
857fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath = new Path();
867fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath.moveTo(0.0f, 0.0f);
877fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f);
887fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f);
897fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f);
907fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
917fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPathBounds = new RectF();
927fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mPath.computeBounds(mPathBounds, true);
937fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
947fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mBoundsPaint = new Paint();
957fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mBoundsPaint.setColor(0x4000ff00);
967fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
977fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mOffset = mMediumPaint.getStrokeWidth();
987fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            final int width = (int) (mPathBounds.width() + mOffset * 3.0f + 0.5f);
997fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            final int height = (int) (mPathBounds.height() + mOffset * 3.0f + 0.5f);
1007fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ALPHA_8);
1017fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            Canvas canvas = new Canvas(mBitmap);
1027fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(-mPathBounds.left + mOffset * 1.5f, -mPathBounds.top + mOffset * 1.5f);
1037fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mMediumPaint);
1040965a3244b4c3009d08db2e084cdcb681ef66d26Romain Guy            canvas.setBitmap(null);
1057fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        }
1067fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
1077fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        @Override
1087fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        protected void onDraw(Canvas canvas) {
1097fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            super.onDraw(canvas);
1107fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
1117fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawARGB(255, 255, 255, 255);
1127fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
1137fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.save();
1147fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(200.0f, 60.0f);
1157fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mSmallPaint);
116d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet
1177fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(350.0f, 0.0f);
1187fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mMediumPaint);
1197fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
1207fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setShader(mShader);
1217fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(350.0f, 0.0f);
1227fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mLargePaint);
1237fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setShader(null);
1247fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.restore();
125d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet
1267fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.save();
1277fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(200.0f, 360.0f);
1287fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mSmallPaint);
1297fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawRect(mPathBounds, mBoundsPaint);
130d348b6eaa98e23cb38d90906df109aaa2d20ea7fXavier Ducrohet
1317fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(350.0f, 0.0f);
1327fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawBitmap(mBitmap, mPathBounds.left - mOffset * 1.5f,
1337fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy                    mPathBounds.top - mOffset * 1.5f, null);
1347fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawRect(mPathBounds, mBoundsPaint);
1357fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawLine(0.0f, -360.0f, 0.0f, 500.0f, mLinePaint);
1367fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy
1377fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setShader(mShader);
1387fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.translate(350.0f, 0.0f);
1397fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawPath(mPath, mLargePaint);
1407fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.drawRect(mPathBounds, mBoundsPaint);
1417fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            mLargePaint.setShader(null);
1427fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy            canvas.restore();
1437fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy        }
1447fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy    }
1457fbcc0492fca03857e3c45064f4aa040af817d55Romain Guy}
146