来自Drawable.createFromPath或FileInputStream的NinePatchDrawable

时间:2010-11-29 06:28:10

标签: android drawable nine-patch

当从Drawable.createFromPath加载或使用InputStream从许多其他方法加载时,我无法获得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);

2 个答案:

答案 0 :(得分:1)

我回答了一个非常类似的问题here关于非基于资源的九个问题。要从.apk档案中读取文件,我使用以下内容:

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

答案 1 :(得分:0)

我有一个非常类似的问题。我正在尝试从我通过网络检索到的NinePatchDrawable创建Bitmap。我还没有找到解决这个问题的方法。由于Drawable.createFrom...方法显然不起作用,我唯一的选择似乎是了解如何格式化九补丁块,并调用NinePatch构造函数。有关详细信息,请参阅SO-thread