Android 数据库中读取图片名称加载相应的资源
2016-11-04 16:52
260 查看
android的开发中会遇到这么一种需求,就是把图片存储到本地,每次加载的时候通过保存的图片的名称加载图片,或者利用请求到的/存储数据库存储的名称去加载图片 。
开始我把数据放在了assets中,开始我发现这种方法对于一张两张的图片就无所谓但是图片一多就会出现明显的卡顿,检查发现因为每次 mAssetManager.open().这个方法返回的是inputstream 是个流然后把流用 BitmapFactory.decodeStream()转化成Bitmap的形式。
对此 总结了两种方式 。
第一种方案:
把所需要加载的文件放入raw文件夹中 然后getIdentifier()方法获取图片的ID
如果说文件是在Drawable中呢 ?那么我们使用的时候只需要改下文件夹既可以了
第二种方案:
相对于第一种的方法第二种方案有点复杂而且性能有所降低,利用反射等原理。
1、首先呢我们要把文件所放的目录整体的遍历一遍 存储到Map中
map中存放的是图片的名称和ID
2、使用的时候根据文件夹下的KEY(图片名称)获取对应的id然后利用 openRawResource()方法加载图片
如果是drawable下的图片呢 ? 同理也是一样
可以下载demo体验下
下载地址 : http://download.csdn.net/detail/u012153184/9673268
开始我把数据放在了assets中,开始我发现这种方法对于一张两张的图片就无所谓但是图片一多就会出现明显的卡顿,检查发现因为每次 mAssetManager.open().这个方法返回的是inputstream 是个流然后把流用 BitmapFactory.decodeStream()转化成Bitmap的形式。
对此 总结了两种方式 。
第一种方案:
把所需要加载的文件放入raw文件夹中 然后getIdentifier()方法获取图片的ID
//第一个参数文件名称(不加后缀), 第二个参数文件夹名称,第三个参数包名 public int getImageID(String name) { int id = mContext.getResources().getIdentifier(name, "raw", mContext.getPackageName()); return id; }
如果说文件是在Drawable中呢 ?那么我们使用的时候只需要改下文件夹既可以了
//第一个参数文件名称(不加后缀), 第二个参数文件夹名称,第三个参数包名 public int getImageID(String name) { int id = mContext.getResources().getIdentifier(name, "drawable", mContext.getPackageName()); return id; }
第二种方案:
相对于第一种的方法第二种方案有点复杂而且性能有所降低,利用反射等原理。
1、首先呢我们要把文件所放的目录整体的遍历一遍 存储到Map中
map中存放的是图片的名称和ID
2、使用的时候根据文件夹下的KEY(图片名称)获取对应的id然后利用 openRawResource()方法加载图片
public Map<String, Integer> getRawImage(){ Map<String, Integer> map = new HashMap<String, Integer>(); Field[] fields = R.raw.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { try { map.put(fields[i].getName(), fields[i].getInt(R.raw.class)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } fields = null; return map; } ;
如果是drawable下的图片呢 ? 同理也是一样
public Map<String, Integer> getDrawableImage(){ Map<String, Integer> map = new HashMap<String, Integer>(); Field[] fields = R.drawable.class.getDeclaredFields(); for (int i = 0; i < fields.length; i++) { try { map.put(fields[i].getName(), fields[i].getInt(R.drawable.class)); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } } fields = null; return map; } ;
可以下载demo体验下
下载地址 : http://download.csdn.net/detail/u012153184/9673268
相关文章推荐
- 关于eclipse android 开发加载图片资源提示找不到对应名称解决办法
- android 在res资源下的图片,根据图片名称加载图片
- eclipse android 开发加载图片资源提示找不到对应名称解决办法
- Android ListView 性能优化-----(异步加载图片资源)
- android 读取原始(Raw)资源 作为数据库文件
- Android ImageView如何加载网络图片资源
- Android加载图片资源的几种方式
- android-读取Assets图片资源保存到SD - 随心
- android读取相册加载本地图片制成头像
- 求代码:android listview checkbox 从数据库里读取数据后怎么设置相应的checkbox为选中状态
- 【解决方案】Android图片加载中drawable等图片资源报错,提示找不到该资源
- Android 读取不同位置(drawable,asset,SDCard)的图片资源
- android加载网络图片并缓存,对图片进行点击打开相应链接
- Android 图片资源的异步加载2
- Android根据图片名称加载Drawable里面的图片并且显示
- Android多渠道打包の根据渠道来加载相应的资源文件及Java代码
- Android 异步加载图片分析总结,多种方法加载图片资源
- android有时无法读取url图片资源
- Android之ListView异步加载网络图片(优化缓存机制)和对图片资源进行优化,并且实现内存双缓存 + 磁盘缓存