Android圖片選擇器

一、概述

           應公司項目需求,要作一個圖片選擇器,網上搜索了一些源碼,我在別人的基礎上進行了修改,另外頁面也進行了重整,個人是先加載圖片文件夾列表,而後再進入選擇圖片。
           參考博客地址:http://blog.csdn.net/lmj623565791/article/details/39943731
           修改bug:能夠掃描gif文件,而且後綴名是大寫的也能夠掃描出來 例如:image.GIFjava

效果圖以下:數據庫



2.掃描圖片文件夾的核心代碼,就是開啓一個線程去掃描數據庫全部圖片,而後找到他們     的父路徑,再進行去重,利用handle更新uiide

		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裏面ui

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

 點擊下載源碼this

相關文章
相關標籤/搜索