NinePatchDrawableのサポートが必要です:
私のアプリはネットワークからテーマをダウンロードできます。9パッチPNGを除いて、ほとんどすべてが正常に機能します。
final Bitmap bubble = getFromTheme("bubble");
if (bubble == null) return null;
final byte[] chunk = bubble.getNinePatchChunk();
if (!NinePatch.isNinePatchChunk(chunk)) return null;
NinePatchDrawable d = new NinePatchDrawable(getResources(), bubble, chunk, new Rect(), null);
v.setBackgroundDrawable(d);
d = null;
System.gc();
getFromTheme()は、SDカードからビットマップをロードします。9パッチPNGはすでにコンパイルされています。つまり、必要なチャンクが含まれています。
ビットマップをNinePatchDrawableオブジェクトに変換する方法は機能しているようです。これは、画像を描画したときと同じようにストレッチできるためです。
動作しないのはパディングだけです。私はすでにパディングを次のようなビューに設定しようとしました:
final Rect rect = new Rect(); // or just use the new Rect() set
d.getPadding(rect); // in the constructor
v.setPadding(rect.left, rect.top, rect.right, rect.bottom);
d.getPadding(rect)は、チャンクから取得したパディングで変数rectを埋める必要がありますね。しかし、そうではありません。
結果:TextView(v)は、9パッチ画像のコンテンツ領域にテキストを表示しません。パディングは、各座標で0に設定されます。
読んでくれてありがとう。