1

入力ストリームから 9patch ドローアブルを開始する際に問題があります。アプリにスキンを適用する必要があり、Web サービスからスキン要素と画像をダウンロードする必要があります。

SO と android dev ガイドの両方で妥当な量のリソースを探しましたが、どれもうまくいかないようです。

リソースからドローアブルを設定すると 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)) の 1 つに変更しました。Android ソースでは、リソース イメージで開始された入力ソースです。

このコードは、入力画像が 9 パッチの場合でも常に BitmapDrawable を返します。

この機能を実際に機能させることに成功した人はいますか? 解決に向けての助けやヒントをいただければ幸いです。

前もって感謝します。

4

2 に答える 2

0

実行時に9つのパッチを作成するために、この要点を作成しました:https ://gist.github.com/4391807

于 2012-12-27T20:59:14.287 に答える
0

さて、解決策はここには解決策がないということです。9 パッチには、コンパイル時に生成される配列として 9 つのパッチ チャンクが必要だからです。明らかに、Web リソースから画像をロードするときにコンパイル フェーズはありません。

Android エンジニアへ - Android SDK の将来のリリースでは、実行時に 9 つのパッチ チャンクを生成できるようになる可能性があります。

于 2012-10-08T02:18:55.423 に答える