入力ストリームから 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 を返します。
この機能を実際に機能させることに成功した人はいますか? 解決に向けての助けやヒントをいただければ幸いです。
前もって感謝します。