源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

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

  • 时间:2022-09-04 21:49 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要: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中使用的示例代码:
[u]复制代码[/u] 代码如下:
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 情况进行说明:
[u]复制代码[/u] 代码如下:
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方法肯定是这样定义的:
[u]复制代码[/u] 代码如下:
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程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部