サーバーから 9 パッチの画像を受信して、Android アプリの UI に表示しています。これは厳しい要件であるため、9 つのパッチを APK にコンパイルできません。Android は、任意の PNG を 9 パッチとして認識して表示するようです。つまり、画像のストレッチは、外側のピクセルによって示されるアウトラインに従います。問題は、Android がまだファイルの 1px 境界を表示していることです。そのため、ビューのパディングを -1 に設定して、行が表示されないようにしました。黒い線がまだ表示されているため、これは機能していないようです。
<ImageView
android:id="@+id/stub_image"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:scaleType="centerCrop"
android:padding="-1px"
android:cropToPadding="true"
android:src="@drawable/stub_image"
android:contentDescription="@string/image_title" />
PNG の周囲に 1px の境界を表示しないようにこのレイアウトを設定するにはどうすればよいですか? View クラスをオーバーライドして手動でピクセルをいじらずにこれを行うことはできますか?
解決
@alex がリンクした投稿の最初のオプションに従って、空のソリューションで ninepatch ファイルをコンパイルしています。それらはサーバーからアプリに提供されます。png はサーバーによって送信される可能性があるため、ninepatches と同様に、drawable を取得するために使用するコードは次のとおりです。
InputStream stream = .. //whatever
Bitmap bitmap = BitmapFactory.decodeStream(stream);
byte[] chunk = bitmap.getNinePatchChunk();
if (NinePatch.isNinePatchChunk(chunk)) {
return new NinePatchDrawable(getResources(), bitmap, chunk, new Rect(), null);
} else {
return new BitmapDrawable(getResources(), bitmap);
}