2010-11-29 2 views
0

Drawable.createFromPath 또는 다른 InputStream을 사용하는 여러 메서드에서로드 할 때 9 패치 드로어 블을 사용할 수 없습니다 (예 : 9 패치 이미지가 늘어납니다).Drawable.createFromPath 또는 FileInputStream에서 NinePatchDrawable

리소스를로드 할 때 동일한 9 개의 패치를로드하면 문제가 없습니다. 내가 시도하는 방법은 다음과 같습니다.

Button b = (Button) findViewById(R.id.Button01); 

Drawable d = null; 

//From Resources (WORKS!) 
d = getResources().getDrawable(R.drawable.test); 

//From Raw Resources (Doesn't Work) 
InputStream is = getResources().openRawResource(R.raw.test); 
d = Drawable.createFromStream(is, null); 

//From Assets (Doesn't Work) 
try { 
InputStream is = getResources().getAssets().open("test.9.png"); 
d = Drawable.createFromStream(is, null); 
} catch (Exception e) {e.printStackTrace();} 

//From FileInputStream (Doesn't Work) 
try { 
FileInputStream is = openFileInput("test.9.png"); 
d = Drawable.createFromStream(is, null); 
} catch (Exception e) {e.printStackTrace();} 

//From File path (Doesn't Work) 
d = Drawable.createFromPath(getFilesDir() + "/test.9.png"); 


if (d != null) b.setBackgroundDrawable(d); 

답변

0

나는 매우 비슷한 문제가 있습니다. 네트워크를 통해 검색 한 Bitmap에서 NinePatchDrawable을 만들려고합니다. 나는 아직도 그 문제에 대한 해결책을 찾지 못했다. Drawable.createFrom... 메서드가 작동하지 않으므로 내 유일한 옵션은 9 패치 덩어리를 포맷하는 방법을 이해하고 NinePatch 생성자를 호출하는 것입니다. 자세한 내용은 SO-thread을 참조하십시오.

1

나는 리소스가없는 9 패치에 관해 매우 비슷한 질문 인 here에 대답했다. .apk 아카이브 내에서 파일을 읽으려면 다음과 같이 사용합니다.

String filepath = "com/kanzure/images/thx1138.png"; 
InputStream stream = getClass().getClassLoader().getResourceAsStream(filepath);