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

     点击下载源码

  • 相关阅读:
    I.MX6 Surfaceflinger 机制
    理解 Android Fragment
    RPi 2B DDNS 动态域名
    RPi 2B IPC webcam server
    理解 Android MVP 开发模式
    I.MX6 system.img unpack repack
    can't set android permissions
    VMware Ubuntu 共享文件夹
    解决oracle数据库连接不上的问题
    perfect-scrollbar示例
  • 原文地址:https://www.cnblogs.com/yishaochu/p/5078628.html
Copyright © 2020-2023  润新知