3

我试图在运行时从位于资产文件夹中的已编译的九个补丁 PNG 文件构造一个NinePatchDrawable 。问题是构造函数似乎忽略了九个补丁块中的填充。

InputStream inStream = context.getAssets().open(imagePath);
Bitmap bitmap = BitmapFactory.decodeStream(inStream);
byte[] chunk = bitmap.getNinePatchChunk();
boolean isNinePatch = NinePatch.isNinePatchChunk(chunk);
Rect padding = new Rect();
if(isNinePatch)
    drawable = new NinePatchDrawable(context.getResources(), bitmap, chunk, padding, imagePath);

此代码返回一个所有边均为零填充的NinePatchDrawable 。我很肯定 PNG 文件包含正确的填充边距,因为以下代码使用完全相同的已编译九补丁 PNG 文件返回具有正确填充的NinePatchDrawable :

InputStream inStream = context.getAssets().open(imagePath);
Drawable drawable = Drawable.createFromResourceStream(context, null, inStream, null);

(我为什么不直接使用这种方法呢?因为它在某些手机上会崩溃。)

如果有人可以向我展示如何在运行时使用正确的填充构建 NinePatchDrawable,我将非常感激!

4

0 回答 0