从输入资源启动9-patch drawable的问题

时间:2012-08-13 06:32:01

标签: android drawable nine-patch

从输入流启动9patch drawable时遇到了一些问题。我需要为我的应用程序设置外观,并且需要从Web服务下载外观元素和图像。

在SO和Android开发指南中寻找合理数量的资源,但似乎没有一个对我有用。

从资源设置drawable确实正确处理9patch所以逻辑上智能这样做是存在的,但由于某种原因,下面的代码我从android源代码本身,无法处理9补丁

     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补丁,此代码也始终返回BitmapDrawable。

有没有人成功实现此功能? 我很感激任何帮助或提示解决方案。

提前谢谢。

2 个答案:

答案 0 :(得分:0)

好的,解决方案是这里没有解决方案,因为9补丁需要9个补丁块作为在编译时生成的数组。显然,从Web资源加载图像时我们没有编译阶段。

对于Android工程师 - 也许将来发布的Android SDK将能够在运行时生成九个补丁块。

答案 1 :(得分:0)

我已经创建了这个要点,以便在运行时创建9个补丁:https://gist.github.com/4391807