我有业务需要在运行时创建NinePatchDrawable对象,也就是说,从服务器接收外部.png图像,它必须作为九个补丁应用于按钮的背景中(例如)。 p>
我试图创建NinePatchDrawable对象,但构造函数要求我提供描述补丁的“byte [] chunck”。问题是,我不知道如何从没有9patch信息的位图构建这个块。
有关此主题的任何想法?我从错误的角度看问题了吗?
答案 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;
}
位于资产目录下。