2

我有一个业务需要在运行时创建 NinePatchDrawable 对象,即从服务器接收外部 .png 图像,并且必须将其作为九个补丁应用到按钮的背景中(例如)。

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

关于这个话题的任何想法?我是否从错误的角度看待问题?

4

2 回答 2

2

请参阅我对在运行时创建 NinePatch/NinePatchDrawable 的回答

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

该方法 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;
}

在这种情况下,它my_nine_patch_image.9.png位于资产目录下。

于 2015-04-23T13:12:34.987 回答
1

我已经在问题 5519768中回答了这个问题。请记住“源”和“编译”九补丁图像之间的区别。

于 2011-04-01T23:20:13.777 回答