Android读取assets目录下的所有图片并显示的方法

本文实例讲述了Android读取assets目录下的所有图片并显示的方法。分享给大家供大家参考。具体方法分析如下:

在assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。

1. 先在Activity里面调用getAssets() 来获取AssetManager引用。

2. 再用AssetManager的open(String fileName, int accessMode) 方法则指定读取的文件以及访问模式就能得到输入流InputStream。

3. 然后就是用已经open file 的inputStream读取文件,读取完成后记得inputStream.close() 。

4.调用AssetManager.close() 关闭AssetManager。

需要注意的是,来自Resources和Assets 中的文件只可以读取而不能进行写的操作。

下面看一下在Activity中使用的示例代码:

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()方式调用就行了。

举个简单例子:

我们有一个HomeActivity,然后我们它里面调用GetData.initdata(HomeActivity.this).

在GetData类的initdata方法肯定是这样定义的:

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程序设计有所帮助。

以上是 Android读取assets目录下的所有图片并显示的方法 的全部内容, 来源链接: utcz.com/z/334426.html

回到顶部