19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpackage android.graphics.drawable.shapes; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Canvas; 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Paint; 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectimport android.graphics.Path; 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Creates geometric paths, utilizing the {@link android.graphics.Path} class. 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The path can be drawn to a Canvas with its own draw() method, 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * but more graphical control is available if you instead pass 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the PathShape to a {@link android.graphics.drawable.ShapeDrawable}. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class PathShape extends Shape { 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private Path mPath; 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mStdWidth; 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mStdHeight; 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mScaleX; // cached from onResize 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private float mScaleY; // cached from onResize 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * PathShape constructor. 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param path a Path that defines the geometric paths for this shape 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param stdWidth the standard width for the shape. Any changes to the 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * width with resize() will result in a width scaled based 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the new width divided by this width. 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @param stdHeight the standard height for the shape. Any changes to the 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * height with resize() will result in a height scaled based 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * on the new height divided by this height. 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathShape(Path path, float stdWidth, float stdHeight) { 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPath = path; 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStdWidth = stdWidth; 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mStdHeight = stdHeight; 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas, Paint paint) { 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.save(); 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.scale(mScaleX, mScaleY); 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.drawPath(mPath, paint); 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project canvas.restore(); 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected void onResize(float width, float height) { 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScaleX = width / mStdWidth; 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mScaleY = height / mStdHeight; 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project @Override 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public PathShape clone() throws CloneNotSupportedException { 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project PathShape shape = (PathShape) super.clone(); 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project shape.mPath = new Path(mPath); 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return shape; 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 76