在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 仿微信 选择照片 示例代码下载

android 仿微信 选择照片 示例代码下载

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:2.49M
  • 下载次数:28
  • 浏览次数:394
  • 发布时间:2016-07-07
  • 实例类别:Android平台开发
  • 发 布 人:weiyuhui
  • 文件格式:.zip
  • 所需积分:2
 相关标签: Android 微信 照片

实例介绍

【实例简介】

【实例截图】

【核心代码】

package com.example.testphoto;

import java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import android.app.Activity;
import android.app.ProgressDialog;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.provider.MediaStore;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.AdapterView;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.nostra13.universalimageloader.cache.disc.naming.Md5FileNameGenerator;
import com.nostra13.universalimageloader.cache.memory.impl.WeakMemoryCache;
import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class MainActivity extends Activity {

	private GridView gridview;
	TextView group_text, total_text;
	ListView group_listview;

	private ProgressDialog mProgressDialog;

	private ProgressDialog mDirDialog;
	private ImageLoader mImageLoader;

	private HashMap<String, ArrayList<String>> mGruopMap = new HashMap<String, ArrayList<String>>();
	private ArrayList<ImageBean> imgBeanLists = new ArrayList<ImageBean>();

	// 所有的图片
	private ArrayList<String> mAllImgs;
	private final static int SCAN_OK = 1;

	private final static int SCAN_FOLDER_OK = 2;
	private RelativeLayout list_layout;
	private DisplayImageOptions options;

	private ListAdapter listAdapter;
	
	private int limit_count ;
	
	Animation toUp, toDown;

	// private GridAdapter gridAdatper;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		initView();
		initData();
		setListener();
	}

	private void setListener() {
		
		total_text.setOnClickListener(new View.OnClickListener() {
			
			@Override
			public void onClick(View arg0) {
				//addedPath返回给上个页面-----这里只选择相册里的
				Intent dataIntent = new Intent();
				Bundle dataBundle = new Bundle();
				dataBundle.putStringArrayList("pic_paths", addedPath);
				dataIntent.putExtras(dataBundle);
				setResult(RESULT_OK, dataIntent);
				MainActivity.this.finish();
			}
		});
		
		group_text.setOnClickListener(new View.OnClickListener() {

			@Override
			public void onClick(View arg0) {
				if (list_layout.getVisibility() == View.VISIBLE) {
					list_layout.setVisibility(View.GONE);
					list_layout.startAnimation(toDown);
				} else {
					list_layout.setVisibility(View.VISIBLE);
					list_layout.startAnimation(toUp);
				}
			}
		});

		group_listview
				.setOnItemClickListener(new AdapterView.OnItemClickListener() {

					@Override
					public void onItemClick(AdapterView<?> arg0, View arg1,
							int position, long arg3) {
						// 点击刷新对应的视图
						if (chooseItem.get(0) == position) {
							// 不做操作,返回
							list_layout.setVisibility(View.GONE);
						} else {
							chooseItem.clear();
							chooseItem.add(position);
							listAdapter.notifyDataSetChanged();
							list_layout.setVisibility(View.GONE);

							// 获取到mAllImgs;并显示到数据中
							GridAdapter gridAdatper = new GridAdapter();
							gridAdatper.setData(new ArrayList<String>());
							gridview.setAdapter(gridAdatper);
							gridAdatper = null;

							// 得到当前的来刷新
							if (0 == position) {
								getImages();
							} else {
								// 刷新当前的GridView
								mDirDialog = ProgressDialog.show(MainActivity.this, null, "正在加载...");
								nowStrs.clear();
								String fa_path = imgBeanLists.get(position).getFa_filepath();
								nowStrs.addAll(mGruopMap.get(fa_path));
								Log.e("cxm", "fa_path=" fa_path ",nowStrs.size=" nowStrs.size());
								mHandler.sendEmptyMessageDelayed(SCAN_FOLDER_OK, 1000);
//								// 通知Handler扫描图片完成
//								getFolderImages(imageBean.getFa_filepath());
							}
						}
					}
				});
		
		gridview.setOnItemClickListener(new AdapterView.OnItemClickListener() {

			@Override
			public void onItemClick(AdapterView<?> arg0, View arg1, int position,
					long arg3) {
				if(chooseItem.get(0) == 0 && 0 == position) {
					//调用系统相机
					//判断是否已满8张图片
					if(addedPath.size() >= limit_count) {
						Toast.makeText(MainActivity.this, "最多选8张,请取消后再点击拍照", Toast.LENGTH_SHORT).show();
						return;
					}
					
					tempCameraPath = IndexActivity.CAMERA_PATH   "/"
							  System.currentTimeMillis()   ".jpg";
					Log.e("cxm", "path============" tempCameraPath);
					PickPhotoUtil.getInstance().takePhoto(
							MainActivity.this, "tempUser", tempCameraPath);
				}
			}
		});
	}
	
	private String tempCameraPath = "";
	
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
		
		super.onActivityResult(requestCode, resultCode, data);
		if(resultCode == RESULT_OK) {
			switch (requestCode) {
			case PickPhotoUtil.PickPhotoCode.PICKPHOTO_TAKE:
				
				File fi = new File("");
				PickPhotoUtil.getInstance().takeResult(this,
						data, fi);
				
				//相机的图片
				ArrayList<String> camepaths = new ArrayList<String>();
				camepaths.add(tempCameraPath);
				Intent dataIntent = new Intent();
				Bundle dataBundle = new Bundle();
				dataBundle.putStringArrayList("pic_paths", camepaths);
				dataIntent.putExtras(dataBundle);
				setResult(RESULT_OK, dataIntent);
				MainActivity.this.finish();
				break;

			default:
				break;
			}
		}
	}

//	protected ArrayList<String> getFolderImages(final String path_dir) {
//		nowStrs.clear();
//		Log.e("cxm", "foldename="   path_dir);
//		// 显示进度条
//		mDirDialog = ProgressDialog.show(this, null, "正在加载...");
//
//		new Thread(new Runnable() {
//
//			@Override
//			public void run() {
//				getFiles(path_dir);
//
//				// 通知Handler扫描图片完成
//				mHandler.sendEmptyMessage(SCAN_FOLDER_OK);
//			}
//		}).start();
//		return null;
//	}

	ArrayList<String> nowStrs = new ArrayList<>();

//	private void getFiles(String filePath) {
//		File root = new File(filePath);
//		File[] files = root.listFiles();
//		for (File file : files) {
//			if (file.isFile()) {
//				nowStrs.add(file.getAbsolutePath());
//			} else {
//				/*
//				 * 递归调用
//				 */
//				getFiles(file.getAbsolutePath());
//			}
//		}
//	}

	private Handler mHandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			switch (msg.what) {
			case SCAN_OK:
				// 关闭进度条
				mProgressDialog.dismiss();

				// adapter = new GroupAdapter(MainActivity.this, list =
				// subGroupOfImage(mGruopMap), mGroupGridView);
				// mGroupGridView.setAdapter(adapter);
				// 扫描完成后,给listview赋值------给所有图片赋值
				imgBeanLists = subGroupOfImage(mGruopMap);
				listAdapter = new ListAdapter();
				listAdapter.setData(imgBeanLists);
				group_listview.setAdapter(listAdapter);
				// 获取到mAllImgs;并显示到数据中
				GridAdapter gridAdatper = new GridAdapter();
				gridAdatper.setData(mAllImgs);
				gridview.setAdapter(gridAdatper);
				gridAdatper = null;
				break;
			case SCAN_FOLDER_OK:
				mDirDialog.dismiss();
				// 获取到mAllImgs;并显示到数据中
				GridAdapter gridAdatper1 = new GridAdapter();
				gridAdatper1.setData(nowStrs);
				gridview.setAdapter(gridAdatper1);
				gridAdatper1 = null;
				break;
			}
		}

	};

	private void initView() {
		gridview = (GridView) findViewById(R.id.gridview);
		group_text = (TextView) findViewById(R.id.group_text);
		total_text = (TextView) findViewById(R.id.total_text);
		group_listview = (ListView) findViewById(R.id.group_listview);

		list_layout = (RelativeLayout) findViewById(R.id.list_layout);
	}

	private void initData() {
		// 初始化数据,所有图片应在281张以内
		chooseItem.add(0);
		// imageLoader配置
		DisplayImageOptions imageOptions = new DisplayImageOptions.Builder()
				.cacheInMemory().cacheOnDisc().build();
		ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
				this).defaultDisplayImageOptions(imageOptions)
				.discCacheFileNameGenerator(new Md5FileNameGenerator())
				.memoryCacheSize(2 * 1024 * 1024)
//				.memoryCache(new WeakMemoryCache())
				.build();
		ImageLoader.getInstance().init(config);
		mImageLoader = ImageLoader.getInstance();

		options = new DisplayImageOptions.Builder().cacheOnDisc()
				.showImageForEmptyUri(R.drawable.friends_sends_pictures_no)
				.showImageOnFail(R.drawable.friends_sends_pictures_no)
				.showStubImage(R.drawable.friends_sends_pictures_no).build();

		mAllImgs = new ArrayList<String>(281);
		addedPath = new ArrayList<String>();
		limit_count = 8-IndexActivity.mPicList.size();
		total_text.setText("0/" limit_count "张");
		toUp = AnimationUtils.loadAnimation(MainActivity.this, R.anim.act_bottom_to_top);
		toDown = AnimationUtils.loadAnimation(MainActivity.this, R.anim.act_top_to_bottom);
		// listAdapter = new ListAdapter();
		// group_listview.setAdapter(listAdapter);
		//
		// gridAdatper = new GridAdapter();
		// gridview.setAdapter(gridAdatper);
		getImages();
	}

	/**
	 * 利用ContentProvider扫描手机中的图片,此方法在运行在子线程中
	 */
	private void getImages() {
		if (!Environment.getExternalStorageState().equals(
				Environment.MEDIA_MOUNTED)) {
			Toast.makeText(this, "暂无外部存储", Toast.LENGTH_SHORT).show();
			return;
		}

		// 显示进度条
		mProgressDialog = ProgressDialog.show(this, null, "正在加载...");

		new Thread(new Runnable() {

			@Override
			public void run() {
				Uri mImageUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
				ContentResolver mContentResolver = MainActivity.this
						.getContentResolver();

				// 只查询jpeg和png的图片
				Cursor mCursor = mContentResolver.query(mImageUri, null,
						MediaStore.Images.Media.MIME_TYPE   "=? or "
								  MediaStore.Images.Media.MIME_TYPE   "=?",
						new String[] { "image/jpeg", "image/png" },
						MediaStore.Images.Media.DATE_MODIFIED);

				while (mCursor.moveToNext()) {
					// 获取图片的路径
					String path = mCursor.getString(mCursor
							.getColumnIndex(MediaStore.Images.Media.DATA));

					// 获取该图片的父路径名
					File pa_file = new File(path).getParentFile();
					String parentName = pa_file.getAbsolutePath();
					if (mAllImgs.size() < 281) {
						mAllImgs.add(path);
					}
					// 根据父路径名将图片放入到mGruopMap中
					if (!mGruopMap.containsKey(parentName)) {
						ArrayList<String> chileList = new ArrayList<String>();
						chileList.add(path);
						mGruopMap.put(parentName, chileList);
					} else {
						mGruopMap.get(parentName).add(path);
					}
				}

				mCursor.close();

				// 通知Handler扫描图片完成
				mHandler.sendEmptyMessage(SCAN_OK);

			}
		}).start();

	}

	/**
	 * 组装分组界面GridView的数据源,因为我们扫描手机的时候将图片信息放在HashMap中 所以需要遍历HashMap将数据组装成List
	 * 
	 * @param mGruopMap
	 * @return
	 */
	private ArrayList<ImageBean> subGroupOfImage(
			HashMap<String, ArrayList<String>> gruopMap) {
		if (gruopMap.size() == 0) {
			return null;
		}
		ArrayList<ImageBean> list = new ArrayList<ImageBean>();
		Iterator<Map.Entry<String, ArrayList<String>>> it = gruopMap.entrySet()
				.iterator();
		ImageBean ig0 = new ImageBean();
		ig0.setFolderName("所有图片");
		ig0.setImageCounts(0);
		ig0.setTopImagePath("");
		list.add(0, ig0);
		while (it.hasNext()) {
			Map.Entry<String, ArrayList<String>> entry = it.next();
			ImageBean mImageBean = new ImageBean();
			String key = entry.getKey();
			List<String> value = entry.getValue();
			File dir_file = new File(key);
			mImageBean.setFolderName(dir_file.getName());
			mImageBean.setImageCounts(value.size());
			mImageBean.setTopImagePath(value.get(0));// 获取该组的第一张图片
			mImageBean.setFa_filepath(key);
			list.add(mImageBean);
		}

		return list;

	}

	private ArrayList<String> addedPath = null;

	// gridview的Adapter
	class GridAdapter extends BaseAdapter {
		// 根据三种不同的布局来应用
		final int VIEW_TYPE = 2;
		final int TYPE_1 = 0;
		final int TYPE_2 = 1;
		LayoutInflater inflater;
		private ArrayList<String> gridStrings;/**
		 * 用来存储图片的选中情况
		 */
		private HashMap<Integer, Boolean> mSelectMap = new HashMap<Integer, Boolean>();

		public GridAdapter() {
			gridStrings = new ArrayList<>();
			inflater = LayoutInflater.from(MainActivity.this);
		}

		public void setData(ArrayList<String> strs) {
			if (null != strs) {
				gridStrings.clear();
				gridStrings.addAll(strs);
				notifyDataSetChanged();
			}
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return gridStrings.size();
		}

		@Override
		public String getItem(int position) {
			if (chooseItem.get(0) == 0) {
				return gridStrings.get(position - 1);
			} else {
				Log.e("cxm", "position====" position ",path=" gridStrings.get(position));
				return gridStrings.get(position);
			}
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public int getItemViewType(int position) {
			if (chooseItem.get(0) == 0) {
				if (position == 0) {
					return TYPE_1;
				} else {
					return TYPE_2;
				}
			} else {
				return TYPE_2;
			}
		}

		@Override
		public int getViewTypeCount() {
			if (chooseItem.get(0) == 0) {
				return VIEW_TYPE;
			} else {
				return 1;
			}
		}

		@Override
		public View getView(final int position, View convertView, ViewGroup arg2) {
			GridHolder gridHolder = null  ;
			PhotoHolder photoHodler = null;
			int type = getItemViewType(position);
			if (convertView == null) {
				switch (type) {
				case TYPE_1:
					// 显示拍照
					photoHodler = new PhotoHolder();
					convertView = inflater.inflate(R.layout.take_photo, null);
					convertView.setTag(photoHodler);
					break;
				case TYPE_2:
					convertView = inflater.inflate(R.layout.grid_item, null);
					gridHolder = new GridHolder();
					gridHolder.grid_image = (ImageView) convertView
							.findViewById(R.id.grid_image);
					gridHolder.grid_img = (ImageView) convertView
							.findViewById(R.id.grid_img);
					convertView.setTag(gridHolder);
					break;
				default:
					break;
				}
			} else {
				switch (type) {
				case TYPE_1:
					// 显示拍照
					photoHodler = (PhotoHolder) convertView.getTag();
					break;
				case TYPE_2:
					gridHolder = (GridHolder) convertView.getTag();
					break;
				default:
					break;
				}
			}

			if (type == TYPE_2) {
				// 判断是否已经添加
				mImageLoader.displayImage("file://"   getItem(position),
						gridHolder.grid_image, options);

//				gridHolder.grid_check
//						.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
//
//							@Override
//							public void onCheckedChanged(CompoundButton arg0,
//									boolean isChecked) {
//								Log.e("cxm", "boo=="   isChecked);
////								if (isSelect) {
////									addedPath.add(getItem(position));
////								} else {
////									// 已经被点击了取消
////									addedPath.remove(getItem(position));
////								}
//								if(!mSelectMap.containsKey(position) || !mSelectMap.get(position)){
//									addedPath.add(getItem(position));
//								} else {
//									mSelectMap.put(position, isChecked);
//									addedPath.remove(getItem(position));
//								}
//							}
//						});
				
				gridHolder.grid_img.setOnClickListener(new View.OnClickListener() {
					
					@Override
					public void onClick(View view) {
						if(addedPath.contains(getItem(position))) {
							//已经包含这个path了,则干掉
							addedPath.remove(getItem(position));
							((ImageView)view).setImageResource(R.drawable.friends_sends_pictures_select_icon_unselected);
						} else {
							//判断大小
							if(addedPath.size() < limit_count) {
								addedPath.add(getItem(position));
								((ImageView)view).setImageResource(R.drawable.friends_sends_pictures_select_icon_selected);
								//添加图片,显示出来张数
							}
						}
						mYhandler.sendEmptyMessage(0);
					}
				});

				if (addedPath.contains(getItem(position))) {
					// 已经添加过了
					gridHolder.grid_img.setImageResource(R.drawable.friends_sends_pictures_select_icon_selected);
				} else {
					gridHolder.grid_img.setImageResource(R.drawable.friends_sends_pictures_select_icon_unselected);
				}
			}

			return convertView;
		}

		class PhotoHolder {

		}

		class GridHolder {
			ImageView grid_image;
			public ImageView grid_img;
		}

	}
	
	Handler mYhandler = new Handler() {

		@Override
		public void handleMessage(Message msg) {
			switch (msg.what) {
			case 0:
				total_text.setText(addedPath.size() "/" limit_count "张");
				break;

			default:
				break;
			}
		}
	};

	private ArrayList<Integer> chooseItem = new ArrayList<>();

	class ListAdapter extends BaseAdapter {
		private ArrayList<ImageBean> beans = null;
		LayoutInflater inflater;

		public ListAdapter() {
			inflater = LayoutInflater.from(MainActivity.this);
			beans = new ArrayList<>();
		}

		public void setData(ArrayList<ImageBean> listBeans) {
			if (listBeans != null) {
				beans.clear();
				beans.addAll(listBeans);
				notifyDataSetChanged();
			}
		}

		@Override
		public int getCount() {
			// TODO Auto-generated method stub
			return beans.size();
		}

		@Override
		public ImageBean getItem(int arg0) {
			// TODO Auto-generated method stub
			return beans.get(arg0);
		}

		@Override
		public long getItemId(int arg0) {
			// TODO Auto-generated method stub
			return 0;
		}

		@Override
		public View getView(int position, View convertView, ViewGroup arg2) {
			final ListViewHolder listHoder;
			ImageBean imageBean = beans.get(position);
			if (convertView == null) {
				listHoder = new ListViewHolder();
				convertView = inflater.inflate(R.layout.list_item, null);
				listHoder.myimage_view = (ImageView) convertView
						.findViewById(R.id.myimage_view);
				listHoder.choose_img = (ImageView) convertView
						.findViewById(R.id.choose_img);
				listHoder.folder_text = (TextView) convertView
						.findViewById(R.id.folder_text);
				listHoder.count_text = (TextView) convertView
						.findViewById(R.id.count_text);
				convertView.setTag(listHoder);
			} else {
				listHoder = (ListViewHolder) convertView.getTag();
			}
			int cho_posi = chooseItem.get(0);
			if (position == cho_posi) {
				// 相等则显示
				listHoder.choose_img.setVisibility(View.VISIBLE);
			} else {
				listHoder.choose_img.setVisibility(View.GONE);
			}
			String img_path = "";
			if (position == 0) {
				img_path = beans.get(1).getTopImagePath();
				listHoder.count_text.setVisibility(View.GONE);
			} else {
				img_path = imageBean.getTopImagePath();
				listHoder.count_text.setVisibility(View.VISIBLE);
				listHoder.count_text.setText(imageBean.getImageCounts() "张");
			}
			listHoder.folder_text.setText(imageBean.getFolderName());
			mImageLoader.displayImage("file://"   img_path,
					listHoder.myimage_view, options);
			return convertView;
		}

		class ListViewHolder {
			ImageView myimage_view;
			ImageView choose_img;
			TextView folder_text, count_text;
		}

	}
}

标签: Android 微信 照片

实例下载地址

android 仿微信 选择照片 示例代码下载

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警