Android读取assets目录下的所有图片并显示的方法
2023-06-13 09:15:30 时间
本文实例讲述了Android读取assets目录下的所有图片并显示的方法。分享给大家供大家参考。具体方法分析如下:
在assets文件夹里面的文件都是保持原始的文件格式,需要用AssetManager以字节流的形式读取文件。
1.先在Activity里面调用getAssets()来获取AssetManager引用。
2.再用AssetManager的open(StringfileName,intaccessMode)方法则指定读取的文件以及访问模式就能得到输入流InputStream。
3.然后就是用已经openfile的inputStream读取文件,读取完成后记得inputStream.close()。
4.调用AssetManager.close()关闭AssetManager。
需要注意的是,来自Resources和Assets中的文件只可以读取而不能进行写的操作。
下面看一下在Activity中使用的示例代码:
String[]list_image=null;
try{
//得到assets/processedimages/目录下的所有文件的文件名,以便后面打开操作时使用
list_image=context.getAssets().list("processedimages");
}catch(IOExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}
for(inti=0;i<list_image.length;++i)
{
InputStreamopen=null;
try{
Stringtemp="processedimages/"+list_image[i];
open=context.getAssets().open(temp);
Bitmapbitmap=BitmapFactory.decodeStream(open);
Map<String,Object>map=newHashMap<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);
//AssignthebitmaptoanImageViewinthislayout
}catch(IOExceptione){
e.printStackTrace();
}finally{
if(open!=null){
try{
open.close();
}catch(IOExceptione){
e.printStackTrace();
}
}
}
}
这样所有的map中的关键字“iv"处理论上就保存了我们读取的bitmap,可以结果并非如此,大家应该注意到了在”bg“关键字处我们也保存了一个图片,只不过它是通过R.drawable.方式获取的,实验证明这种方式是可以成功读取并显示的。为什么从assets中读取的bitmap不能显示呢?
解决办法是:
实现ViewBinder接口,对两种的资源id和bitmap情况进行说明:
@Override
publicbooleansetViewValue(
Viewview,
Objectdata,
StringtextRepresentation){
//TODOAuto-generatedmethodstub
if((viewinstanceofImageView)&&(datainstanceofBitmap)){
ImageViewimageView=(ImageView)view;
Bitmapbmp=(Bitmap)data;
imageView.setImageBitmap(bmp);
returntrue;
}
returnfalse;
}
});
这样就可以了。
还有一种情况是,我们在非Activity类中读取assets文件下的内容,这个时候就得把调用者(Activity类)的context传递过去,然后在这个非Activity类中使用context.getAssets()方式调用就行了。
举个简单例子:
我们有一个HomeActivity,然后我们它里面调用GetData.initdata(HomeActivity.this).
在GetData类的initdata方法肯定是这样定义的:
{
//othercodes...
String[]list_image=null;
try{
//得到assets/processedimages/目录下的所有文件的文件名,以便后面打开操作时使用
list_image=context.getAssets().list("processedimages");//attentionthisline
}catch(IOExceptione1)
{
e1.printStackTrace();
}
//othercodes.....
}
因为getAssets方法是Context下的方法,在非Activity类中是不能直接使用的。
希望本文所述对大家的Android程序设计有所帮助。
相关文章
- android onresume方法,非静态方法’onResume’Android Studio
- android okio使用方法,Android 开源框架 Okio 原理剖析「建议收藏」
- android onresume方法,Android onActivityResult()和onResume()的执行顺序
- 工厂方法模式及在Android源码中的应用
- Android preference_android studio preview
- Android 听筒扬声器切换 并且监听音量变化
- 【Android NDK 开发】JNI 方法解析 ( int 数组传递 | jintArray 类型 | 数组转换 | 获取数组长度 | 获取数组元素 | 指针遍历数组 | 数组返回值设置 )
- 【Android NDK 开发】JNI 方法解析 ( 字符串数组参数传递 | 字符串遍历 | 类型强转 | Java 字符串与 C 字符串转换 | 字符串释放 )
- 【Android 内存优化】Android 原生 API 图片压缩原理 ( Bitmap_compress 方法解析 | Skia 二维图形库 | libjpeg 函数库 | libpng 函数库 )
- 【Android Protobuf 序列化】Protobuf 性能测试 ( fastjson 序列化与反序列化 | gson 序列化与反序列化 | 三种序列化与反序列化性能对比 )
- 【Android Gradle 插件】AaptOptions 配置 ⑥ ( Overlay 重叠包机制 | AaptOptions#additionalParameters 附加参数配置 )
- 【Android UI】Canvas 画布 ⑥ ( Canvas 绘图源码分析 | ViewRootImpl#draw 方法源码 | ViewRootImpl#drawSoftware 方法源码 )
- Android加载Gif图片的一般方法:Movie实现详解手机开发
- Swing, RAP(RCP), Android 程序开发中,GUI刷新实现方式对比
- android异步加载图片并缓存到本地实现方法
- Android检测Cursor泄漏的原理以及使用方法
- Android图片特效处理的方法实例
- Android中对于图片的内存优化方法
- Android网络图片查看显示的实现方法
- 基于将Android工程做成jar包和资源文件的解决方法
- 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法
- Android拍照保存在系统相册不显示的问题解决方法
- Android之采用execSQL与rawQuery方法完成数据的添删改查操作详解
- android设置控件的颜色字体的方法
- Android下保存简单网页到本地(包括简单图片链接转换)实现代码
- android工程下不能运行javamain程序的解决方法
- Android实现授权访问网页的方法
- Android实现信号强度监听的方法