4

ボタンの9Patch背景を動的に設定しようとした人はいますか? 重要な場合は、ボタンの幅と高さが設定されます wrap_content

はいの場合、「黒い線」の問題をどのように解決しましたか?

ありがとう

4

1 に答える 1

5

9 パッチ画像に黒い点が表示されている場合は、画像を事前にコンパイルしていないことが原因です。

実行時に 9 パッチ画像を背景として設定するには、境界線が削除されて PNG チャンクにエンコードされるときに、事前にコンパイルする必要があります。

これを行うには、アプリケーションのフォルダーに .9.png 画像を挿入しres/drawable、コンパイルして .apk を生成します (Eclipse では、.apk を右クリックしますproject root > Android Tools > Export Unsigned Application Package)。次に、.apk を解凍すると、9 パッチのコンパイル済みデータを含む .9.png 画像が得られます。

コンパイル済みの 9 パッチ イメージを使用して、次のようにしてイメージを読み込みます。

private Drawable loadNinePatch(String path, Context context) {
        Bitmap bitmap = BitmapFactory.decodeFile(path);
        byte[] chunk = bitmap.getNinePatchChunk();
        if(NinePatch.isNinePatchChunk(chunk)) {
            return new NinePatchDrawable(context.getResources(), bitmap, chunk, new Rect(), null);
        } else return new BitmapDrawable(bitmap);
}

次に、ボタンの背景として設定します。

button.setBackgroundDrawable(loadNinePatch("/data/data/your.app/files/button_background.9.png", context));
于 2012-11-12T16:11:38.543 に答える