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到对象之间有可达路径来避免垃圾回收机制来清楚这些对象,那么在 对象到达最大堆的容量限制后就会产生内存溢出溢出. ...
随机推荐
- js COOKIE 记住帐号或者uuid
当开始接到这个任务的时候,我对cookie还是没多少了解的,而uuid的生成也是一无所知.但是当你发现这个网址http://stackoverflow.com/questions/105034/how ...
- myeclipse svn配置
在MyEclipse 9.0中安装SVN插件遇到一些问题,参考网上一些方法,最终解决.以下是个人认为比较简易的方法,供参考: 安装过程: (1)svn的插件版本site-1.8.14.zip(可根据自 ...
- linux -- 串口调试总结
linux 串口输出调试 在某些情况下,需要同时对两台或多台Linux主机进行管理和操作.如果手头缺少足够多的键盘和显示器,那么通过一台机器的串口对其余主机进行控制不失为一种快捷.有效的方法. 下面就 ...
- zz github配置
First : 安装:ubuntu 下,终端输入命令: sudo apt-get install git-core git-gui git-doc Next : 设置SSH Key 检查是否已经有SS ...
- DOS攻击和DDOS攻击有啥区别啊
DDOS是DOS攻击中的一种方法. DoS:是Denial of Service的简称,即拒绝服务,不是DOS操作系统,造成DoS的攻击行为被称为DoS攻击,其目的是使计算机或网络无法提供正常的服务. ...
- C++ STL算法系列5---equal() , mismatch()
equal和mismatch算法的功能是比较容器中的两个区间内的元素.这两个算法各有3个参数first1,last1和first2.如果对 于区间[first1,last1)内所有的first1+i, ...
- bzoj1391 最大权闭合子图(also最小割、网络流)
一道裸的最小割的题,写一下只是练练手. 表示被卡M,RE不开心.一道裸题至于吗? 再次复习一下最大权闭合子图: 1.每一个点若为正权,与源点连一条容量为绝对值权值的边.否则连向汇点一条容量为绝对值权值 ...
- 9个offer,12家公司,35场面试,从微软到谷歌,应届计算机毕业生的2012求职之路
1,简介 毕业答辩搞定,总算可以闲一段时间,把这段求职经历写出来,也作为之前三个半月的求职的回顾. 首先说说我拿到的offer情况: 微软,3面->终面,搞定 百度,3面->终面,口头of ...
- Python 最佳实践
前言 对我来说,以前每次面试是我审视自己,检验自己的一种方式.每次准备面试,以及被面试官问住的时候才会发现,其实我python我学的还不够好.工作中也是,可以从其他的同事那里获得成长.但是我今天说的是 ...
- debian7下部署nginx服务器
笔者是在vmware中的Debian7下部署nginx服务器,采用离线部署方式.过程如下: 1.准备好需要的离线安装包 nginx-1.6.2.tar.gz,pcre-8.34.tar.gz,open ...