在运行时创建NinePatch

时间:2010-12-28 15:49:40

标签: java android runtime nine-patch

我有业务需要在运行时创建NinePatchDrawable对象,也就是说,从服务器接收外部.png图像,它必须作为九个补丁应用于按钮的背景中(例如)。 p>

我试图创建NinePatchDrawable对象,但构造函数要求我提供描述补丁的“byte [] chunck”。问题是,我不知道如何从没有9patch信息的位图构建这个块。

有关此主题的任何想法?我从错误的角度看问题了吗?

2 个答案:

答案 0 :(得分:1)

我已经回答了这个over at question 5519768。请记住“源”和“已编译”的九个图像之间的差异。

答案 1 :(得分:1)

请参阅我对Create a NinePatch/NinePatchDrawable in runtime

的回答

我开发了一个工具,用于从(未编译的)NinePatch位图创建NinePatchDrawable。 请参阅https://gist.github.com/knight9999/86bec38071a9e0a781ee

方法 * { box-sizing: border-box; } 帮助你。

例如,

NinePatchDrawable createNinePatchDrawable(Resources res, Bitmap bitmap)

其中

    ImageView imageView = (ImageView) findViewById(R.id.imageview);
    Bitmap bitmap = loadBitmapAsset("my_nine_patch_image.9.png", this);
    NinePatchDrawable drawable = NinePatchBitmapFactory.createNinePatchDrawable(getResources(), bitmap);
    imageView.setBackground( drawable );

在这种情况下,public static final Bitmap loadBitmapAsset(String fileName,Context context) { final AssetManager assetManager = context.getAssets(); BufferedInputStream bis = null; try { bis = new BufferedInputStream(assetManager.open(fileName)); return BitmapFactory.decodeStream(bis); } catch (IOException e) { e.printStackTrace(); } finally { try { bis.close(); } catch (Exception e) { } } return null; } 位于资产目录下。