本文实例讲述了Android读取assets目录下的所有图片并显示的方法。分享给大家供大家参考。具体方法分析如下: 在assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。 复制代码 代码如下: List<Map<String, Object>> cateList = new ArrayList<Map<String, Object>>(); String[] list_image = null; try { //得到assets/processedimages/目录下的所有文件的文件名,以便后面打开操作时使用 list_image = context.getAssets().list("processedimages"); } catch (IOException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } for(int i=0;i<list_image.length;++i) { InputStream open = null; try { String temp = "processedimages/"+list_image[i]; open = context.getAssets().open(temp); Bitmap bitmap = BitmapFactory.decodeStream(open); Map<String, Object> map = new HashMap<String, Object>(); map.put("name", list_image[i]); map.put("iv", bitmap); map.put("bg", R.drawable.phone_vip_yes); map.put("cate_id",i); cateList.add(map); // Assign the bitmap to an ImageView in this layout } catch (IOException e) { e.printStackTrace(); } finally { if (open != null) { try { open.close(); } catch (IOException e) { e.printStackTrace(); } } } } 这样所有的map中的关键字“iv"处理论上就保存了我们读取的bitmap,可以结果并非如此,大家应该注意到了在”bg“关键字处我们也保存了一个图片,只不过它是通过R.drawable.方式获取的,实验证明这种方式是可以成功读取并显示的。为什么从assets中读取的bitmap不能显示呢? 解决办法是: 实现 ViewBinder接口,对两种的资源id和bitmap 情况进行说明: 复制代码 代码如下: adapter.setViewBinder(new ViewBinder() { @Override public boolean setViewValue( View view, Object data, String textRepresentation) { // TODO Auto-generated method stub if((view instanceof ImageView) && (data instanceof Bitmap)) { ImageView imageView = (ImageView) view; Bitmap bmp = (Bitmap) data; imageView.setImageBitmap(bmp); return true; } return false; } }); 这样就可以了。 还有一种情况是,我们在非Activity类中读取assets文件下的内容,这个时候就得把调用者(Activity类)的context传递过去,然后在这个非Activity类中使用context.getAssets()方式调用就行了。 举个简单例子: 复制代码 代码如下: public void initdata(Context context)
{ //other codes... String[] list_image = null; try { //得到assets/processedimages/目录下的所有文件的文件名,以便后面打开操作时使用 list_image = context.getAssets().list("processedimages");//attention this line } catch (IOException e1) { e1.printStackTrace(); } //other codes..... } 因为getAssets方法是Context下的方法,在非Activity类中是不能直接使用的。 希望本文所述对大家的Android程序设计有所帮助。 |