19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2006 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; 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 21e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * The NinePatch class permits drawing a bitmap in nine or more sections. 22e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Essentially, it allows the creation of custom graphics that will scale the 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * way that you define, when content added within the image exceeds the normal 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * bounds of the graphic. For a thorough explanation of a NinePatch image, 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * read the discussion in the 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <a href="{@docRoot}guide/topics/graphics/2d-graphics.html#nine-patch">2D 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Graphics</a> document. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * <p> 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The <a href="{@docRoot}guide/developing/tools/draw9patch.html">Draw 9-Patch</a> 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * tool offers an extremely handy way to create your NinePatch images, 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * using a WYSIWYG graphics editor. 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * </p> 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectpublic class NinePatch { 35deba785f122a47915756ffd991f5540d952cf937Romain Guy private final Bitmap mBitmap; 36e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 373b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy /** 38e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Used by native code. This pointer is an instance of Res_png_9patch*. 39e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 403b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy * @hide 413b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy */ 42e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy public final int mNativeChunk; 43e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 44deba785f122a47915756ffd991f5540d952cf937Romain Guy private Paint mPaint; 45e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy private String mSrcName; 46f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy 47f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy /** 48f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy * Create a drawable projection from a bitmap to nine patches. 49f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy * 50e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param bitmap The bitmap describing the patches. 51e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param chunk The 9-patch data chunk describing how the underlying bitmap 52e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * is split apart and drawn. 53f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy */ 54f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy public NinePatch(Bitmap bitmap, byte[] chunk) { 55f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy this(bitmap, chunk, null); 56f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy } 57f3187b7df158d2de36955ddcc666ba4b8544a2ceRomain Guy 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Create a drawable projection from a bitmap to nine patches. 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 61e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param bitmap The bitmap describing the patches. 62e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param chunk The 9-patch data chunk describing how the underlying 63e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * bitmap is split apart and drawn. 64e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param srcName The name of the source for the bitmap. Might be null. 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NinePatch(Bitmap bitmap, byte[] chunk, String srcName) { 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBitmap = bitmap; 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSrcName = srcName; 69e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy mNativeChunk = validateNinePatchChunk(mBitmap.ni(), chunk); 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * @hide 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public NinePatch(NinePatch patch) { 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mBitmap = patch.mBitmap; 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mSrcName = patch.mSrcName; 7854285f2cbfb6e307d594ca264f7230b4e1e3cdcePhil Dubach if (patch.mPaint != null) { 7954285f2cbfb6e307d594ca264f7230b4e1e3cdcePhil Dubach mPaint = new Paint(patch.mPaint); 8054285f2cbfb6e307d594ca264f7230b4e1e3cdcePhil Dubach } 81e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy // No need to validate the 9patch chunk again, it was done by 82e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy // the instance we're copying from 83e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy mNativeChunk = patch.mNativeChunk; 84e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy } 85e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 86e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy @Override 87e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy protected void finalize() throws Throwable { 88e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy try { 89e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy nativeFinalize(mNativeChunk); 90e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy } finally { 91e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy super.finalize(); 92e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy } 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 95e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 96e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns the name of this NinePatch object if one was specified 97e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * when calling the constructor. 98e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 99e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy public String getName() { 100e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy return mSrcName; 101e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy } 102e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 103e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 104e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns the paint used to draw this NinePatch. The paint can be null. 105e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 106e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #setPaint(Paint) 107e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #draw(Canvas, Rect) 108e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #draw(Canvas, RectF) 109e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 110e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy public Paint getPaint() { 111e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy return mPaint; 112e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy } 113e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 114e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 115e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Sets the paint to use when drawing the NinePatch. 116e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 117e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param p The paint that will be used to draw this NinePatch. 118e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 119e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #getPaint() 120e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #draw(Canvas, Rect) 121e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @see #draw(Canvas, RectF) 122e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void setPaint(Paint p) { 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project mPaint = p; 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1263b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy 1273b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy /** 128e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns the bitmap used to draw this NinePatch. 1293b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy */ 1303b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy public Bitmap getBitmap() { 1313b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy return mBitmap; 1323b748a44c6bd2ea05fe16839caf73dbe50bd7ae9Romain Guy } 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 135e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Draws the NinePatch. This method will use the paint returned by {@link #getPaint()}. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 137e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param canvas A container for the current matrix and clip used to draw the NinePatch. 138e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param location Where to draw the NinePatch. 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas, RectF location) { 141f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy canvas.drawPatch(this, location, mPaint); 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 143f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 145e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Draws the NinePatch. This method will use the paint returned by {@link #getPaint()}. 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 147e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param canvas A container for the current matrix and clip used to draw the NinePatch. 148e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param location Where to draw the NinePatch. 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas, Rect location) { 151f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy canvas.drawPatch(this, location, mPaint); 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 155e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Draws the NinePatch. This method will ignore the paint returned 156e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * by {@link #getPaint()} and use the specified paint instead. 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 158e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param canvas A container for the current matrix and clip used to draw the NinePatch. 159e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param location Where to draw the NinePatch. 160e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param paint The Paint to draw through. 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public void draw(Canvas canvas, Rect location, Paint paint) { 163f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy canvas.drawPatch(this, location, paint); 164f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy } 165f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy 166f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy void drawSoftware(Canvas canvas, RectF location, Paint paint) { 167e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy nativeDraw(canvas.mNativeCanvas, location, mBitmap.ni(), mNativeChunk, 168f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy paint != null ? paint.mNativePaint : 0, canvas.mDensity, mBitmap.mDensity); 169f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy } 170f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy 171f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy void drawSoftware(Canvas canvas, Rect location, Paint paint) { 172e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy nativeDraw(canvas.mNativeCanvas, location, mBitmap.ni(), mNativeChunk, 173f296dca95f09be9832b5dcc79717986525d2b6cbRomain Guy paint != null ? paint.mNativePaint : 0, canvas.mDensity, mBitmap.mDensity); 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 17611ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn /** 17711ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn * Return the underlying bitmap's density, as per 17811ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn * {@link Bitmap#getDensity() Bitmap.getDensity()}. 17911ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn */ 18011ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn public int getDensity() { 18111ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn return mBitmap.mDensity; 18211ea33471e1a14a8594f0b2cd012d86340dd3bd8Dianne Hackborn } 183e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 184e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 185e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns the intrinsic width, in pixels, of this NinePatch. This is equivalent 186e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * to querying the width of the underlying bitmap returned by {@link #getBitmap()}. 187e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getWidth() { 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mBitmap.getWidth(); 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 192e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 193e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns the intrinsic height, in pixels, of this NinePatch. This is equivalent 194e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * to querying the height of the underlying bitmap returned by {@link #getBitmap()}. 195e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public int getHeight() { 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mBitmap.getHeight(); 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 200e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 201e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Indicates whether this NinePatch contains transparent or translucent pixels. 202e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * This is equivalent to calling <code>getBitmap().hasAlpha()</code> on this 203e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * NinePatch. 204e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public final boolean hasAlpha() { 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return mBitmap.hasAlpha(); 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 210e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Returns a {@link Region} representing the parts of the NinePatch that are 211e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * completely transparent. 212e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 213e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param bounds The location and size of the NinePatch. 214e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 215e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @return null if the NinePatch has no transparent region to 216e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * report, else a {@link Region} holding the parts of the specified bounds 217e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * that are transparent. 218e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 219e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy public final Region getTransparentRegion(Rect bounds) { 220e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy int r = nativeGetTransparentRegion(mBitmap.ni(), mNativeChunk, bounds); 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project return r != 0 ? new Region(r) : null; 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project } 223e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy 224e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 225e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Verifies that the specified byte array is a valid 9-patch data chunk. 226e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 227e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @param chunk A byte array representing a 9-patch data chunk. 228e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * 229e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * @return True if the specified byte array represents a 9-patch data chunk, 230e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * false otherwise. 231e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public native static boolean isNinePatchChunk(byte[] chunk); 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 234e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy /** 235e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * Validates the 9-patch chunk and throws an exception if the chunk is invalid. 236e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * If validation is successful, this method returns a native Res_png_9patch* 237e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy * object used by the renderers. 238e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy */ 239e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy private static native int validateNinePatchChunk(int bitmap, byte[] chunk); 240e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy private static native void nativeFinalize(int chunk); 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void nativeDraw(int canvas_instance, RectF loc, int bitmap_instance, 242e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy int c, int paint_instance_or_null, int destDensity, int srcDensity); 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private static native void nativeDraw(int canvas_instance, Rect loc, int bitmap_instance, 244e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy int c, int paint_instance_or_null, int destDensity, int srcDensity); 245e3b0a0117a2ab4118f868a731b238fe8f2430276Romain Guy private static native int nativeGetTransparentRegion(int bitmap, int chunk, Rect location); 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 247