• 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);
    			}
    		}));

     点击下载源码

  • 相关阅读:
    C++函数声明与定义
    《寻找发帖“水王”》代码的理解
    将正整数转换为二进制数
    使用Cookie记住登录用户
    Java组合算法
    已知链表头结点指针head,写一个函数把这个链表逆序
    String.IsNullOrEmpty官方示例
    log4net的使用
    asp.net MVC4总结
    点击获取页面上的经纬度
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078628.html
Copyright © 2020-2023  润新知