【问题标题】:Issues with initiating 9-patch drawables from input resources从输入资源启动 9-patch 可绘制对象的问题
【发布时间】:2012-08-13 06:32:00
【问题描述】:

从输入流启动 9patch 可绘制对象时遇到问题。我需要为我的应用设置皮肤,并且需要从网络服务下载皮肤元素和图像。

在 SO 和 android 开发指南中搜索了合理数量的资源,但似乎没有一个对我有用。

从资源中设置可绘制对象确实可以正确处理 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-patch,此代码也始终返回 BitmapDrawable。

有没有人成功地让这个功能真正发挥作用? 对于解决方案的任何帮助或提示,我将不胜感激。

提前谢谢你。

【问题讨论】:

    标签: android drawable nine-patch


    【解决方案1】:

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

    致 Android 工程师 - 也许未来版本的 android SDK 将能够在运行时生成九个补丁块。

    【讨论】:

      【解决方案2】:

      我创建了这个 gist 来在运行时创建 9 个补丁:https://gist.github.com/4391807

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-04-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-06-16
        • 1970-01-01
        相关资源
        最近更新 更多