내 안드로이드 앱의 UI에 표시 할 9 패치 이미지를 서버에서 받고 있습니다. 이것은 까다로운 요구 사항이므로 9 패치를 APK로 컴파일 할 수 없습니다. 안드로이드는 모든 PNG를 인식하고 9 패치로 표시합니다. 이는 이미지의 스트레칭이 바깥 쪽 픽셀에 표시된 윤곽선을 따름을 의미합니다. 문제는 안드로이드가 여전히 파일의 1px 경계를 표시한다는 것입니다. 그래서 라인에 표시되지 않도록보기 -1 패딩 설정하려고했습니다. 검은 색 선이 계속 표시되기 때문에 이것이 작동하지 않는 것 같습니다.PNG를 표시 할 때 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 클래스를 오버라이드하고 픽셀을 수동으로 사용하지 않고도이 작업을 수행 할 수 있습니까?
솔루션
게시물에 대한 첫 번째 옵션을 이어가, 내가 그렇지 않으면 빈 용액에 나인 패치 NinePatch 파일을 컴파일하고 링크 @ 알렉스. 그런 다음 내 서버에서 앱에 제공됩니다.
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);
}
테두리가 여전히 표시되어 있으면 이미지를 9 패치 드로어 블로드로로드하지 않는다고 생각합니다. 귀하는 이미지의 두 치수 (너비와 높이)가 뷰의 해당 치수 (패딩 빼기)와 같거나 커지도록 이미지를 균일하게 비율 조정 (이미지의 종횡비 유지)하는 scaleType으로 centerCrop을 사용하고 있습니다. 즉, 가로 세로 비율을 변경하지 않고 그림 영역을 완전히 채우기 위해 이미지를 늘입니다. 마치 9 패치 드로어 블처럼 그려지는 것처럼 보일 수 있습니다. 서버의 PNG에는 어떤 확장 프로그램이 있습니까? –
레이아웃을 wrap_content로 변경하고 centerCrop을 놓으면 실제로 전체 이미지를 비연 신 영역으로 축소합니다. –