android从资产获取位图或声音

我需要从资产中获取位图和声音。 我试图这样做:

BitmapFactory.decodeFile("file:///android_asset/Files/Numbers/l1.png"); 

像这样:

 getBitmapFromAsset("Files/Numbers/l1.png"); private Bitmap getBitmapFromAsset(String strName) { AssetManager assetManager = getAssets(); InputStream istr = null; try { istr = assetManager.open(strName); } catch (IOException e) { e.printStackTrace(); } Bitmap bitmap = BitmapFactory.decodeStream(istr); return bitmap; } 

但是我得到的只是自由空间,而不是图像。

这个怎么做?

Solutions Collecting From Web of "android从资产获取位图或声音"

 public static Bitmap getBitmapFromAsset(Context context, String filePath) { AssetManager assetManager = context.getAssets(); InputStream istr; Bitmap bitmap = null; try { istr = assetManager.open(filePath); bitmap = BitmapFactory.decodeStream(istr); } catch (IOException e) { // handle exception } return bitmap; } 

path就是你的文件名fx bitmap.png。 如果你使用子文件夹位图/那么它的位图/ bitmap.png

使用这个代码的工作

 try { InputStream bitmap=getAssets().open("icon.png"); Bitmap bit=BitmapFactory.decodeStream(bitmap); img.setImageBitmap(bit); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } 

更新

在解码Bitmap的时候,如果图像的尺寸非常大的话,我们经常遇到内存溢出exception。 所以阅读文章如何有效地显示图像将帮助你。

接受的答案永远不会closuresInputStream 。 以下是在资产文件夹中获取Bitmap的实用方法:

 /** * Retrieve a bitmap from assets. * * @param mgr * The {@link AssetManager} obtained via {@link Context#getAssets()} * @param path * The path to the asset. * @return The {@link Bitmap} or {@code null} if we failed to decode the file. */ public static Bitmap getBitmapFromAsset(AssetManager mgr, String path) { InputStream is = null; Bitmap bitmap = null; try { is = mgr.open(path); bitmap = BitmapFactory.decodeStream(is); } catch (final IOException e) { bitmap = null; } finally { if (is != null) { try { is.close(); } catch (IOException ignored) { } } } return bitmap; }