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

 更新时间:2014年11月12日 09:20:10   投稿:shichen2014  
这篇文章主要介绍了Android读取assets目录下的所有图片并显示的方法,对读取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 PopupWindow实现微信右上角的弹出菜单

    Android PopupWindow实现微信右上角的弹出菜单

    这篇文章主要为大家详细介绍了Android PopupWindow实现微信右上角的弹出菜单,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-04-04
  • Android项目中引入aar包的正确方法介绍

    Android项目中引入aar包的正确方法介绍

    生成aar之后下一步就是如何引用本地的aar文件,下面这篇文章主要给大家介绍了关于Android项目中引入aar包的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • Android获取RecyclerView滑动距离方法详细讲解

    Android获取RecyclerView滑动距离方法详细讲解

    RecyclerView是Android一个更强大的控件,其不仅可以实现和ListView同样的效果,还有优化了ListView中的各种不足。其可以实现数据纵向滚动,也可以实现横向滚动(ListView做不到横向滚动)。接下来讲解RecyclerView的用法
    2023-01-01
  • Android自定义弹窗提醒控件使用详解

    Android自定义弹窗提醒控件使用详解

    这篇文章主要为大家详细介绍了Android自定义弹窗提醒控件的使用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-07-07
  • 详解Flutter中数据传递的方式

    详解Flutter中数据传递的方式

    这篇文章主要和大家分享一下Flutter中常用的几种数据传递方式的应用场景以及优缺点,文中的示例代码讲解详细,感兴趣的可以了解一下
    2022-06-06
  • 浅析Android文件存储

    浅析Android文件存储

    本文详细介绍了android的外部存储和私有存储。大家在有保存文件的需求的时候,根据自己的需要,选择到底是存在哪里比较合适。内部存储相对较小,不介意把一些大文件存在其中。应该存在外部存储会更好。对于可以给其他文件访问的,可以存在外部存储的公有文件里面
    2021-06-06
  • Android 中的危险权限详细整理

    Android 中的危险权限详细整理

    这篇文章主要介绍了Android 中的危险权限详细整理的相关资料,Android 中有上百种权限,现在将所有的权限归为两类,一类是普通权限,一类的危险权限,危险权限则表示那些可能会触及到用户安全隐私或者对设备安全造成影响的权限,需要的朋友可以参考下
    2017-07-07
  • Android自定义方框EditText注册验证码

    Android自定义方框EditText注册验证码

    这篇文章主要为大家详细介绍了Android自定义方框EditText注册验证码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-06-06
  • Android Button按钮的四种点击事件

    Android Button按钮的四种点击事件

    这篇文章主要为大家详细介绍了Android Button按钮的四种点击事件,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • Android Adapter的几个常用方法

    Android Adapter的几个常用方法

    这篇文章主要为大家详细介绍了Android Adapter的几个常用方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-09-09

最新评论