android自定义相册 支持低端机不内存溢出
1 之前在网上看的自定义相册很多时候在低端机都会内存溢出开始上代码把 首先我们要拿到图片的所有路径
cursor = context.getContentResolver().query(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, // 大图URI
STORE_IMAGES, // 字段
null, // No where clause // 如果这个地方你想对图片的大小进行过滤 可以这样写String s = String.valueOf(1024*1024*4) MediaStore.Images.Media.SIZE+"<="+s
null, // No where clause
MediaStore.Images.Media.DATE_TAKEN + "DESC"); //根据时间排序
int id = cursor.getInt(0);//大图ID
String path = cursor.getString(1);//大图路径
File file = new File(path);
//判断大图是否存在
if (file.exists()) {
String uri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI.buildUpon().
appendPath(Integer.toString(id)).build().toString();
这样就得到很多 content://media/external/images/media/119 这样的路径,没个file 类型的资源 如果是isfile 都会有一个这样的映射 2 拿到url 之后就是gridview 的适配了 你需要使用一个gridview,图片的加载我使用的是imageloader,你可以用跟好的框架 在baseadapter 里面加载图片的逻辑为
ImageSize size = new ImageSize(getImageWidth(),getImageWidth()); // 这个getimagewidth 就就你imageview 宽和高 这个加载出来的图片比系统图片的缩略图还要小些
imageLoader.loadImage(url, size, options,new SimpleImageLoadingListener(viewHolder.imageView)); // 3 然后选择用一个全局的
LocalHelper.getInstance(getApplicationContext()).getCheckedItems();
来存储 你选择的图片 4 然后在返回的时候如何处理 ,就是要把你选择的图片放到你自己的缓存文件 然后size 这个我用是1280 960 标准4:3的图片 ,如果你加载原图 会oom
List<LocalHelper.LocalFile> localFiles = LocalHelper.getInstance(getApplicationContext()).getCheckedItems();
ImageSize size = new ImageSize(CameraConstant.DefaultWidth, 3 * CameraConstant.DefaultWidth / 4);
for (LocalHelper.LocalFile localFile : localFiles) {
final Uri uri =Uri.parse(localFile.getOriginalUri());
imageLoader.loadImage(uri.toString(),size, new ImageLoadingListener() {
@Override
public void onLoadingStarted(String s, View view) {
}
@Override
public void onLoadingFailed(String s, View view, FailReason failReason) {
}
@Override
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
if (Util.isNotEmpty(url)){
BitmapUtils.saveBitmapTofile(bitmap, url);
toastHelper.cancel();
finish();
}else {
String path = BitmapUtils.getCacheDir(act);
BitmapUtils.saveBitmapTofile(bitmap, path);
result.add(path);
if (result.size()==LocalHelper.getInstance(getApplicationContext()).getCheckedItems().size()){
toastHelper.cancel();
finish();
}
}
}
@Override
public void onLoadingCancelled(String s, View view) {
}
});
}
文件路径算法是
public static File getPhotoFolder(Context context) {
File photoFolder = context.getExternalFilesDir("photos");
if (photoFolder == null) {
photoFolder = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/dj/files/photos");
}
return photoFolder;
}
5 回到你显示界面 你把文件路径放到一个list里面 并且把会传到 你选择图片的activity里面
Intent intent = new Intent();
intent.putStringArrayListExtra("path", result);
setResult(RESULT_OK,intent); 6 到界面之后 只需要用gridview 加载一下图片就可以,图片点击在加一个预览效果就prefrect了 7 如果需要源码 请在下面留言啊 兄弟们, 我看看有空传到github上



android自定义相册 支持低端机不内存溢出的更多相关文章
- Android 自定义ScrollView 支持惯性滑动,惯性回弹效果。支持上拉加载更多
先讲下原理: ScrollView的子View 主要分为3部分:head头部,滚动内容,fooder底部 我们实现惯性滑动,以及回弹,都是靠超过head或者fooder 就重新滚动到 ,内容的顶部或 ...
- Android 自定义ImageView支持缩放,拖拽,方便复用
今天刚发了一篇关于ImageView的缩放和拖拽的博客,然后我想了下,将他自定义下,方便我们来复用这个imageView,效果我就不多说了,http://blog.csdn.net/xiaanming ...
- 【Android】Eclipse Memory Analyzer 进行堆内存溢出分析
MAT 不是一个万能工具,它并不能处理所有类型的堆存储文件. 不同厂家的 JVM 所生成的堆转储文件在数据存储格式以及数据存储内容上有很多区别,但是比较主流的厂家和格式,例如 Sun, HP, ...
- Java 内存溢出分析
原文地址:Java 内存溢出分析 博客地址:http://www.moonxy.com 一.前言 Java 的 JVM 的内存一般可分为 3 个区:堆(heap).栈(stack)和方法区(metho ...
- 深入理解Java虚拟机之Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...
- 深入理解Java虚拟机之图解Java内存区域与内存溢出异常
Java内存区域与内存溢出异常 运行时数据区域 程序计数器 用于记录从内存执行的下一条指令的地址,线程私有的一小块内存,也是唯一不会报出OOM异常的区域 Java虚拟机栈 Java虚拟机栈(Java ...
- 深入理解java虚拟机【内存溢出实例】
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...
- (转)《深入理解java虚拟机》学习笔记2——Java内存溢出实例
通过简单的小例子程序,演示java虚拟机各部分内存溢出情况: (1).java堆溢出: Java堆用于存储实例对象,只要不断创建对象,并且保证GC Roots到对象之间有引用的可达,避免垃圾收集器回收 ...
- java虚拟机内存溢出各种场景总结
java堆溢出 java堆用于存储对象实例,只要不断地创建对象,并且保证gc roots到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出. ...
随机推荐
- android view生命周期
onFinishInflate() 当View中所有的子控件均被映射成xml后触发 onMeasure( int , int ) 确定所有子元素的大小 onLayout( boolean , in ...
- 定制Bootstrap遇到无法下载的解决——Blob下载注意事项
今天定制bootstrap(在这里),全部的勾都选过了,于是兴高采烈地点击“编译并下载”.等了一会儿,迅雷7跳出来了“新建下载任务”,但是它居然说这个url不合法! url像这样: blob:http ...
- Hibernate查询出现java.lang.IllegalArgumentException异常解决方法
Hibernate查询出现java.lang.IllegalArgumentException. 异常信息如下:java.lang.IllegalArgumentException at ...
- 使用服务器端控制AJAX页面缓存
你知道 response.setHeader("Cache-Control","no-cache"); 这条语句是干什么的吗? 这是用来防止浏览器缓存动态内容生 ...
- 嵌入式 hi3518平台多路码流添加osd
<span style="font-family:Courier New;"> /******************************************* ...
- Mountain Road
题意: n个车,过一条路,有不同的方向,路上不允许同时有两个方向的车,给出每个车的起始时间,方向,和经过路花费的时间,车最小间隔10个时间,求最后一个车通过路的最早的时间. 分析: dp[i][j][ ...
- jquery的一些技巧总结
1.使用方法在需要使用JQuery的页面中引入JQuery的js文件即可.例如:<script type="text/javascript" src="js/jqu ...
- Python的OO思想
想当年大二的时候,在学校学习Java, 最牛逼的OO思想,用了3页纸就讲完了,还是清华大学出版社的呢. 后来全凭自己啃视频,啃代码才搞懂什么叫做OO. 现在学习Python,就用自己的方式,好好学习一 ...
- 14个最受欢迎的Python开源框架
本文从GitHub中整理出的14个最受欢迎的Python开源框架.这些框架包括事件I/O,OLAP,Web开发,高性能网络通信,测试,爬虫等. Django: Python Web应用开发框架 Dja ...
- DouNet学习_Excel导入导出
Excel --->列是有限的 -->数据靠在单元格右边是数字类型,左边是字符串类型 把一个数字当初字符串来显示 在前面加个 ' -->用程序操作Excel 可以使用Excel的所有 ...
