2012-09-03 5 views
4

아무도 9Patch 배경을 동적으로 설정하려하지 않았습니까? 중요하면 버튼의 너비와 높이가 wrap_content로 설정됩니다.동적으로 9 패치 배경을 설정하십시오

예인 경우 "검은 색"문제를 어떻게 해결 했습니까? 당신이 당신의 이미지를 미리 컴파일하지 않았기 때문에

감사

+3

하지 않습니다 정말로 여기에 묻고 자하는 것을 얻으십시오 – XepterX

+0

http://stackoverflow.com/q/5079868/543711 – iTurki

+0

런타임에 Button의 배경을 변경해야합니다. 배경은 9Patch입니다. 그렇게하면 9 패치가 제대로 작동하지 않습니다. – Toochka

답변

5

당신이 9 패치 이미지를 그린 검은 점을보고하는 경우, 그것은이다.

런타임시 9 패치 이미지를 배경으로 설정하려면 경계를 제거하고 PNG 청크로 인코딩 할 때 미리 컴파일해야합니다.

응용 프로그램의 res/drawable 폴더에 .9.png 이미지를 삽입하고 컴파일 한 다음 .apk (Eclipse에서는 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)); 
+0

좋은 답변입니다. 많은 시간을 절약했습니다. –

관련 문제