2013-04-29 8 views
2

내 안드로이드 앱의 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); 
} 
+0

테두리가 여전히 표시되어 있으면 이미지를 9 패치 드로어 블로드로로드하지 않는다고 생각합니다. 귀하는 이미지의 두 치수 (너비와 높이)가 뷰의 해당 치수 (패딩 빼기)와 같거나 커지도록 이미지를 균일하게 비율 조정 (이미지의 종횡비 유지)하는 scaleType으로 centerCrop을 사용하고 있습니다. 즉, 가로 세로 비율을 변경하지 않고 그림 영역을 완전히 채우기 위해 이미지를 늘입니다. 마치 9 패치 드로어 블처럼 그려지는 것처럼 보일 수 있습니다. 서버의 PNG에는 어떤 확장 프로그램이 있습니까? –

+1

레이아웃을 wrap_content로 변경하고 centerCrop을 놓으면 실제로 전체 이미지를 비연 신 영역으로 축소합니다. –

답변

1

그래서 제대로 표시되는 Bitmap을 구문 분석 할 NinePatchDrawable를 사용하여 PNG 이후의는 아마도 서버뿐만 아니라 ninepatches에 의해 나는 다음과 같이 그릴 수는 얻기 위해 사용하는 코드를 전송됩니다.

+0

잘 설명되어 있지는 않지만, NinePatchDrawable 생성자에 제공된 청크가 컴파일 된 9 패치 데이터입니다. 이는 인앱에서 수행 할 수 없습니다. –

+0

이것은 생각보다 복잡합니다. 이 답변보기 : http://stackoverflow.com/questions/5079868/create-a-ninepatch-ninepatchdrawable-in-runtime/5519768#5519768 – alex

+0

링크 된 질문에서 옵션 1)을 사용했습니다. 리드 주셔서 감사합니다! 위의 –