Android图片选择器

1、概述

           应公司项目需求,要做一个图片选择器,网上搜索了一些源码,我在别人的基础上进行了修改,另外页面也进行了重整,我的是先加载图片文件夹列表,然后再进入选择图片。
           参考博客地址:http://blog.csdn.net/lmj623565791/article/details/39943731
           修改bug:可以扫描gif文件,并且后缀名是大写的也可以扫描出来 例如:image.GIF

效果图如下:



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

		new Thread(new Runnable() {
			@Override
			public void run() {
				String firstImage = null;
				Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
				ContentResolver mContentResolver = ImageFolderActivity.this.getContentResolver();
				// 只查询jpeg和png和gif的图片
				Cursor mCursor = mContentResolver.query(mImageUri, null,
						MediaStore.Images.Media.MIME_TYPE + "=? or "
								+ MediaStore.Images.Media.MIME_TYPE + "=? or "+MediaStore.Images.Media.MIME_TYPE +"=?",
						new String[] {"image/jpeg", "image/png","image/gif"},
						MediaStore.Images.Media.DATE_MODIFIED);

				Log.e("TAG", mCursor.getCount() + "");
				
				HashSet<String> mDirPaths = new HashSet<String>();//临时的辅助类,用于防止同一个文件夹的多次扫描
				while (mCursor.moveToNext()) {
					// 获取图片的路径
					String path = mCursor.getString(mCursor.getColumnIndex(MediaStore.Images.Media.DATA));
					//Log.e("TAG", path);
					// 拿到第一张图片的路径
					if (firstImage == null)
						firstImage = path;
					// 获取该图片的父路径名
					File parentFile = new File(path).getParentFile();
					if (parentFile == null)
						continue;
					String dirPath = parentFile.getAbsolutePath();
					ImageFloder imageFloder = null;
					// 利用一个HashSet防止多次扫描同一个文件夹(不加这个判断,图片多起来还是相当恐怖的~~)
					if (mDirPaths.contains(dirPath)) {
						continue;
					} else {
						mDirPaths.add(dirPath);
						// 初始化imageFloder
						imageFloder = new ImageFloder();
						imageFloder.setDir(dirPath);
						imageFloder.setFirstImagePath(path);
					}

					//得到当前目录下图片数量
					int picSize = parentFile.list(new FilenameFilter() {
						@Override
						public boolean accept(File dir, String fileName) {
							return Util.isImage(fileName);
						}
					}).length;
					imageFloder.setCount(picSize);
					mImageFloders.add(imageFloder);
				}
				mCursor.close();
				//通知Handler扫描图片完成
				mHandler.sendEmptyMessage(0x110);
			}
		}).start();


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

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

 点击下载源码

转载于:https://www.cnblogs.com/yishaochu/p/5078628.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值