1、概述

应公司项目需求,要做一个图片选择器,网上搜索了一些源码,我在别人的基础上进行了修改,另外页面也进行了重整,我的是先加载图片文件夹列表,然后再进入选择图片。

           参考博客地址:http://blog.csdn.net/lmj623565791/article/details/39943731

           修改bug:可以扫描gif文件,并且后缀名是大写的也可以扫描出来 例如:image.GIF

效果图如下:

2.扫描图片文件夹的核心代码,就是开启一个线程去扫描数据库所有图片,然后找到他们     的父路径,再进行去重,利用handle更新ui

  1. new Thread(new Runnable() {
  2. @Override
  3. public void run() {
  4. String firstImage = null;
  5. Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
  6. ContentResolver mContentResolver = ImageFolderActivity.this.getContentResolver();
  7. // 只查询jpeg和png和gif的图片
  8. Cursor mCursor = mContentResolver.query(mImageUri, null,
  9. MediaStore.Images.Media.MIME_TYPE + "=? or "
  10. + MediaStore.Images.Media.MIME_TYPE + "=? or "+MediaStore.Images.Media.MIME_TYPE +"=?",
  11. new String[] {"image/jpeg", "image/png","image/gif"},
  12. MediaStore.Images.Media.DATE_MODIFIED);
  13.  
  14. Log.e("TAG", mCursor.getCount() + "");
  15.  
  16. HashSet<String> mDirPaths = new HashSet<String>();//临时的辅助类,用于防止同一个文件夹的多次扫描
  17. while (mCursor.moveToNext()) {
  18. // 获取图片的路径
  19. String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));
  20. //Log.e("TAG", path);
  21. // 拿到第一张图片的路径
  22. if (firstImage == null)
  23. firstImage = path;
  24. // 获取该图片的父路径名
  25. File parentFile = new File(path).getParentFile();
  26. if (parentFile == null)
  27. continue;
  28. String dirPath = parentFile.getAbsolutePath();
  29. ImageFloder imageFloder = null;
  30. // 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~)
  31. if (mDirPaths.contains(dirPath)) {
  32. continue;
  33. } else {
  34. mDirPaths.add(dirPath);
  35. // 初始化imageFloder
  36. imageFloder = new ImageFloder();
  37. imageFloder.setDir(dirPath);
  38. imageFloder.setFirstImagePath(path);
  39. }
  40.  
  41. //得到当前目录下图片数量
  42. int picSize = parentFile.list(new FilenameFilter() {
  43. @Override
  44. public boolean accept(File dir, String fileName) {
  45. return Util.isImage(fileName);
  46. }
  47. }).length;
  48. imageFloder.setCount(picSize);
  49. mImageFloders.add(imageFloder);
  50. }
  51. mCursor.close();
  52. //通知Handler扫描图片完成
  53. mHandler.sendEmptyMessage(0x110);
  54. }
  55. }).start();

 3.图片列表就是把当前文件夹下的所有文件根据名字后缀名进行过滤,然后展示出来。     放到一个gridView里面

  1. File dirFile=new File(getIntent().getStringExtra(Constant.DIR));
  2. images = Arrays.asList(dirFile.list(new FilenameFilter() {
  3. @Override
  4. public boolean accept(File dir, String filename) {
  5. return Util.isImage(filename);
  6. }
  7. }));

点击下载源码

Android图片选择器的更多相关文章

  1. Android图片选择器--仿QQ

    当做一款APP,需要选择本地图片时,首先考虑的无疑是系统相册,但是Android手机五花八门,再者手机像素的提升,大图无法返回等异常因数,导致适配机型比较困难,微信.QQ都相继的在自己的APP里集成了 ...

  2. Android 图片选择器

    图片选择器,遍历系统所有图片并显示,点击查看大图,长按选中,并将结果返回 字体颜色res/color建立text_selecor.xml <selector xmlns:android=&quo ...

  3. 016 Android 图片选择器(在选中和未选中的过程中,切换展示图片)

    1.目标效果 在选中和未选中的过程中,切换展示图片 2.实现方法 (1)在app--->res--->drawable 右击drawable文件夹右键,new ---->drawab ...

  4. Android之仿微信图片选择器

    先上效果图.第一张图显示的是“相机”文件夹中的所有图片:通过点击多张图片可以到第二张图所示的效果(被选择的图片会变暗,同时选择按钮变亮):点击最下面的那一栏可以到第三张图所示的效果(显示手机中所有包含 ...

  5. [转]Android 超高仿微信图片选择器 图片该这么加载

    快速加载本地图片缩略图的方法: 原文地址:Android 超高仿微信图片选择器 图片该这么加载 其示例代码下载: 仿微信图片选择器 ImageLoader

  6. Android 高级UI设计笔记06:仿微信图片选择器(转载)

    仿微信图片选择器: 一.项目整体分析: 1. Android加载图片的3个目标: (1)尽可能的去避免内存溢出. a. 根据图片的显示大小去压缩图片 b. 使用缓存对我们图片进行管理(LruCache ...

  7. Android 超高仿微信图片选择器 图片该这么加载

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片加载器,在当今像 ...

  8. Android 超高仿微信图片选择器 图片该这么载入

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/39943731,本文出自:[张鸿洋的博客] 1.概述 关于手机图片载入器,在当今像 ...

  9. Android开发之高仿微信图片选择器

    记得刚开始做Andriod项目那会,经常会碰到一些上传图片的功能需求,特别是社交类的app,比如用户头像,说说配图,商品配图等功能都需要让我们到系统相册去选取图片,但官方却没有提供可以选取多张图片的相 ...

随机推荐

  1. 非交织YUV格式转换

    本文为自己写的从非交织yuv420转换出yuv444,yuv422h,yuv422v和手动裁剪422h,422v图片的代码 #include <fcntl.h> #include < ...

  2. bootstrap之CDN

    bootstrap之CDN CDN是Content Delivery Network的缩写,简单的说就是Bootstrap把自己的css.Js等文件托管到某一个网络服务器上使用时调用.如果与Inter ...

  3. codeforces 360 D - Remainders Game

    D - Remainders Game Description Today Pari and Arya are playing a game called Remainders. Pari choos ...

  4. 一些gcd计数问题

    数论什么的全都忘光了吧QAQ 做了几道简单的题练习一下. bzoj1101: [POI2007]Zap 求有多少对数满足 gcd(x,y)=d, 1<=x<=a, 1<=y<= ...

  5. Python数据分析

    一.安装Anaconda 1.下载:https://www.continuum.io/downloads 2.命令行创建和启动环境 conda create --name py35 python=3. ...

  6. JSP内置对象及常用方法

    jsp九大内置对象及四个作用域: 何为作用域 先让我们看看效果: 大概流程是这样的,我们访问index.jsp的时候,分别对pageContext, request, session,applicat ...

  7. 怎么可以让div自适应屏幕的高度?(已解决)

    主要解决问题的方法是用JS脚本. 先看布局, 一个div是首部,另一个div是主体,主体包含左侧菜单和右侧内容. 我想把主体div的高度自适应屏幕剩余区域,怎么做? 首先,获取可见区域的高度,docu ...

  8. 比achartengine更加强大的Android图表控件。

    比achartengine更加强大的图表控件MPAndroidChart. 详细使用及demo:http://www.see-source.com/androidwidget/detail.html? ...

  9. .NET程序反汇编JustDecompile 开源

    JustDecompile是Telerik公司推出一个免费的.net反编译工具,支持插件,与Visual Studio 集成,能够创建Visual Studio project文件.JustDecom ...

  10. 一步步学习javascript基础篇(6):函数表达式之【闭包】

    回顾前面介绍过的三种定义函数方式 1. function sum (num1, num2) { return num1 + num2; }  //函数声明语法定义 2. var sum = funct ...