我正在尝试在运行时从位于文件夹资产中的已编译九补丁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文件包含正确的填充边距,因为以下代码返回带有正确填充的 NinePatchDrawable ,使用完全相同的编译九补丁PNG文件:
InputStream inStream = context.getAssets().open(imagePath);
Drawable drawable = Drawable.createFromResourceStream(context, null, inStream, null);
(为什么我不直接使用这种方法?Because it crashes on some handsets。)
如果有人能告诉我如何使用正确的填充在运行时构建NinePatchDrawable,我真的很感激!