从输入流启动 9patch 可绘制对象时遇到问题。我需要对我的应用程序进行皮肤处理,并且需要从 Web 服务下载皮肤元素和图像。
在 SO 和 android 开发指南中寻找合理数量的资源,但似乎没有一个对我有用。
从资源中设置可绘制对象确实可以正确处理 9patch,因此在逻辑上这样做的聪明之处就在那里,但由于某种原因,我从 android 源本身派生的以下代码无法正确处理 9patch
Rect pad = new Rect();
BitmapFactory.Options opts = new BitmapFactory.Options();
opts.inScreenDensity = DisplayMetrics.DENSITY_DEFAULT;
Bitmap bm = BitmapFactory.decodeResourceStream(resources, typedValue, new FileInputStream(path), pad, opts);
if (bm != null) {
byte[] np = bm.getNinePatchChunk();
if (np == null || !NinePatch.isNinePatchChunk(np)) {
np = null;
pad = null;
}
if (np != null) {
drawable = new NinePatchDrawable(resources, bm, np, pad, path);
} else {
drawable = new BitmapDrawable(resources, bm);
}
}
我已将输入源更改为我的文件之一(FileInputStream(path)),在 android 源中,它是在资源图像上启动的输入源。
即使输入图像是 9-patch,此代码也始终返回 BitmapDrawable。
有没有人成功地让这个功能真正发挥作用?对于解决方案的任何帮助或提示,我将不胜感激。
先感谢您。