15b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy/* 25b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Copyright (C) 2010 The Android Open Source Project 35b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * 45b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Licensed under the Apache License, Version 2.0 (the "License"); 55b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * you may not use this file except in compliance with the License. 65b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * You may obtain a copy of the License at 75b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * 85b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * http://www.apache.org/licenses/LICENSE-2.0 95b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * 105b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * Unless required by applicable law or agreed to in writing, software 115b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * distributed under the License is distributed on an "AS IS" BASIS, 125b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 135b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * See the License for the specific language governing permissions and 145b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy * limitations under the License. 155b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy */ 165b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 175b4628aeeaa0462cd99256d28b636c06b1845930Romain Guypackage com.android.test.hwui; 185b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 195b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.app.Activity; 205b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.content.Context; 215b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Canvas; 225b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Paint; 235b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.Path; 245b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.graphics.RectF; 255b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.os.Bundle; 265b4628aeeaa0462cd99256d28b636c06b1845930Romain Guyimport android.view.View; 275b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 285b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy@SuppressWarnings({"UnusedDeclaration"}) 295b4628aeeaa0462cd99256d28b636c06b1845930Romain Guypublic class ScaledPathsActivity extends Activity { 305b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy @Override 315b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy protected void onCreate(Bundle savedInstanceState) { 325b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy super.onCreate(savedInstanceState); 335b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy final PathsView view = new PathsView(this); 345b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy setContentView(view); 355b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy } 365b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 375b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy public static class PathsView extends View { 385b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy private final Paint mPathPaint; 395b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy private final Path mPath; 405b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy private final RectF mPathBounds = new RectF(); 415b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 425b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy public PathsView(Context c) { 435b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy super(c); 445b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 455b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint = new Paint(); 465b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setAntiAlias(true); 475b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setColor(0xff0000ff); 485b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setStrokeWidth(5.0f); 495b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setStyle(Paint.Style.FILL); 505b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 515b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath = new Path(); 525b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath.moveTo(0.0f, 0.0f); 535b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath.cubicTo(0.0f, 0.0f, 100.0f, 150.0f, 100.0f, 200.0f); 545b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath.cubicTo(100.0f, 200.0f, 50.0f, 300.0f, -80.0f, 200.0f); 555b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath.cubicTo(-80.0f, 200.0f, 100.0f, 200.0f, 200.0f, 0.0f); 565b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 575b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPath.computeBounds(mPathBounds, true); 585b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy } 595b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 605b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy @Override 615b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy protected void onDraw(Canvas canvas) { 625b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy super.onDraw(canvas); 635b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.drawARGB(255, 255, 255, 255); 645b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 655b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setColor(0xff0000ff); 665b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setStyle(Paint.Style.FILL); 675b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 685b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.save(); 695b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 1.0f, 1.0f); 705b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 2.0f, 2.0f); 715b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 4.0f, 4.0f); 725b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.restore(); 735b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 745b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setColor(0xffff0000); 755b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy mPathPaint.setStyle(Paint.Style.STROKE); 765b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 775b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.save(); 785b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 1.0f, 1.0f); 795b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 2.0f, 2.0f); 805b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy drawPath(canvas, 4.0f, 4.0f); 815b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.restore(); 825b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy } 835b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy 845b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy private void drawPath(Canvas canvas, float scaleX, float scaleY) { 855b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.save(); 865b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.scale(scaleX, scaleY); 875b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.drawPath(mPath, mPathPaint); 885b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.restore(); 895b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy canvas.translate(mPathBounds.width() * scaleX, 0.0f); 905b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy } 915b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy } 925b4628aeeaa0462cd99256d28b636c06b1845930Romain Guy} 93