在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)

android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:1.43M
  • 下载次数:253
  • 浏览次数:12606
  • 发布时间:2015-02-06
  • 实例类别:Android平台开发
  • 发 布 人:crazycode
  • 所需积分:2
 相关标签: Android 相册 拍照 图片 实例

实例介绍

【实例简介】其中也包含了 将图片保存至 sd卡功能
【实例截图】


【核心代码】


public class MainActivity extends Activity{
	
	private static final int PHOTO_WITH_DATA = 18;  //从SD卡中得到图片
	private static final int PHOTO_WITH_CAMERA = 37;// 拍摄照片
	
	private Button btn_open;
	private ImageView iv_temp;
	private Dialog dialog_pic;
	
	private String imgPath  = "";
	private String imgName = "";
	
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		
		iv_temp = (ImageView) findViewById(R.id.imageView);
		iv_temp.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				openPictureDialog();
			}
		});
		btn_open = (Button) findViewById(R.id.btn_open);
		btn_open.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				openPictureSelectDialog();
			}
		});
	}
	/**打开对话框**/
	private void openPictureSelectDialog() {
		//自定义Context,添加主题
		Context dialogContext = new ContextThemeWrapper(MainActivity.this, android.R.style.Theme_Light);
		String[] choiceItems= new String[2];
		choiceItems[0] = "相机拍摄";  //拍照
		choiceItems[1] = "本地相册";  //从相册中选择
		ListAdapter adapter = new ArrayAdapter<String>(dialogContext, android.R.layout.simple_list_item_1,choiceItems);
		//对话框建立在刚才定义好的上下文上
		AlertDialog.Builder builder = new AlertDialog.Builder(dialogContext);
		builder.setTitle("添加图片");
		builder.setSingleChoiceItems(adapter, -1, new DialogInterface.OnClickListener() {
			@Override
			public void onClick(DialogInterface dialog, int which) {
				switch (which) {
				case 0:  //相机
					doTakePhoto();
					break;
				case 1:  //从图库相册中选取
					doPickPhotoFromGallery();
					break;
				}
				dialog.dismiss();
			}
		});
		builder.create().show();
	}	
	
	/**打开图片查看对话框**/
	private void openPictureDialog() {
		
		
		dialog_pic = new Dialog(MainActivity.this,R.style.simple_dialog);
		
		LayoutInflater inflater = getLayoutInflater();
		View view = inflater.from(MainActivity.this).inflate(R.layout.dialog_picture, null);
		
		ImageView imgView = (ImageView) view.findViewById(R.id.img_weibo_img);
		Button btnBig = (Button) view.findViewById(R.id.btn_big);
		btnBig.setOnClickListener(new OnClickListener() {
			@Override
			public void onClick(View v) {
				Intent intent = new Intent(MainActivity.this,ImgDisplayActivity.class);
				imgPath = getApplicationContext().getFilesDir() "/" imgName;
				intent.putExtra("imgUrl", imgPath); //将图片的路径传递过去
				startActivity(intent);
			}
		});
		
		
		
		
		dialog_pic.setContentView(view);
		dialog_pic.show();
		
		displayForDlg(imgView,imgPath,btnBig); //显示内容到dialog中
		
	}
	
	private void displayForDlg(ImageView imgView, String imgPath2,Button btnBig) {
		imgView.setVisibility(View.VISIBLE);
		btnBig.setVisibility(View.VISIBLE);
		imgPath = getApplicationContext().getFilesDir() "/" imgName;
		System.out.println("图片文件路径----------》" imgPath);
		if(!imgPath.equals("")) {
			Bitmap tempBitmap = BitmapFactory.decodeFile(imgPath);
			imgView.setImageBitmap(tempBitmap);//显示图片
		}
	}
	/**You will receive this call immediately before onResume() when your activity is re-starting.**/
	@Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data) {
	   
		if(resultCode == RESULT_OK) {  //返回成功
			switch (requestCode) {
			case PHOTO_WITH_CAMERA:  {//拍照获取图片
				String status = Environment.getExternalStorageState();
				if(status.equals(Environment.MEDIA_MOUNTED)) { //是否有SD卡
					
					Bitmap bitmap = BitmapFactory.decodeFile(Environment.getExternalStorageDirectory() "/image.jpg");
					
					imgName = createPhotoFileName();
					//写一个方法将此文件保存到本应用下面啦
	            	savePicture(imgName,bitmap);

	            	if (bitmap != null) {
						//为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存
						Bitmap smallBitmap = ImageTools.zoomBitmap(bitmap, bitmap.getWidth() / 5, bitmap.getHeight() / 5);
						
						iv_temp.setImageBitmap(smallBitmap);
					}
	            	Toast.makeText(MainActivity.this, "已保存本应用的files文件夹下", Toast.LENGTH_LONG).show();
				}else {
					Toast.makeText(MainActivity.this, "没有SD卡", Toast.LENGTH_LONG).show();
				}
				break;
			}
				case PHOTO_WITH_DATA:  {//从图库中选择图片
					ContentResolver resolver = getContentResolver();
					//照片的原始资源地址
					Uri originalUri = data.getData();  
					//System.out.println(originalUri.toString());  //" content://media/external/images/media/15838 "

//	                //将原始路径转换成图片的路径 
//	                String selectedImagePath = uri2filePath(originalUri);  
//	            	System.out.println(selectedImagePath);  //" /mnt/sdcard/DCIM/Camera/IMG_20130603_185143.jpg "
					try {
						 //使用ContentProvider通过URI获取原始图片
						Bitmap photo = MediaStore.Images.Media.getBitmap(resolver, originalUri);
						
						imgName = createPhotoFileName();
		       			//写一个方法将此文件保存到本应用下面啦
		            	savePicture(imgName,photo);
		            	
		            	if (photo != null) {
							//为防止原始图片过大导致内存溢出,这里先缩小原图显示,然后释放原始Bitmap占用的内存
							Bitmap smallBitmap = ImageTools.zoomBitmap(photo, photo.getWidth() / 5, photo.getHeight() / 5);
							
							iv_temp.setImageBitmap(smallBitmap);
						}
//		                iv_temp.setImageURI(originalUri);   //在界面上显示图片
		            	Toast.makeText(MainActivity.this, "已保存本应用的files文件夹下", Toast.LENGTH_LONG).show();
					} catch (FileNotFoundException e) {
						e.printStackTrace();
					} catch (IOException e) {
						e.printStackTrace();
					}
				break;
				}
			}
		}
		super.onActivityResult(requestCode, resultCode, data);
	}
	
   
	/**从相册获取图片**/
	private void doPickPhotoFromGallery() {
		Intent intent = new Intent();
		intent.setType("image/*");  // 开启Pictures画面Type设定为image
		intent.setAction(Intent.ACTION_GET_CONTENT); //使用Intent.ACTION_GET_CONTENT这个Action 
		startActivityForResult(intent, PHOTO_WITH_DATA); //取得相片后返回到本画面
	}
	 
	/**拍照获取相片**/
	private void doTakePhoto() {
	    Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); //调用系统相机
	   
	    Uri imageUri = Uri.fromFile(new File(Environment.getExternalStorageDirectory(),"image.jpg"));
		//指定照片保存路径(SD卡),image.jpg为一个临时文件,每次拍照后这个图片都会被替换
	    intent.putExtra(MediaStore.EXTRA_OUTPUT, imageUri);
       
	    //直接使用,没有缩小  
        startActivityForResult(intent, PHOTO_WITH_CAMERA);  //用户点击了从相机获取
	}
	
	/**创建图片不同的文件名**/
	private String createPhotoFileName() {
		String fileName = "";
		Date date = new Date(System.currentTimeMillis());  //系统当前时间
		SimpleDateFormat dateFormat = new SimpleDateFormat("'IMG'_yyyyMMdd_HHmmss");
		fileName = dateFormat.format(date)   ".jpg";
		return fileName;
	}
	
	 /**获取文件路径**/
	 public String uri2filePath(Uri uri)  
	    {  
	        String[] projection = {MediaStore.Images.Media.DATA };  
	        Cursor cursor = managedQuery(uri, projection, null, null, null);  
	        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);  
	        cursor.moveToFirst();  
	        String path =  cursor.getString(column_index);
	        return path;  
	    }  
	 
	 /**保存图片到本应用下**/
	 private void savePicture(String fileName,Bitmap bitmap) {
		   
			FileOutputStream fos =null;
			try {//直接写入名称即可,没有会被自动创建;私有:只有本应用才能访问,重新内容写入会被覆盖
				fos = MainActivity.this.openFileOutput(fileName, Context.MODE_PRIVATE); 
				bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos);// 把图片写入指定文件夹中
				
			} catch (Exception e) {
				e.printStackTrace();
			} finally {
				try {
					if(null != fos) {
						fos.close();
						fos = null;
					}
				}catch(Exception e) {
					e.printStackTrace();
				}
			}
		}
	}


实例下载地址

android通过拍照、相册获取图片并显示 实例完整源码下载(亲测通过)

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

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

网友评论

第 1 楼 autiao 发表于: 2015-10-29 21:04 29
我来说两句...很好啊

支持(0) 盖楼(回复)

第 2 楼 zgy 发表于: 2015-11-07 22:54 32
我来说两句...不错

支持(0) 盖楼(回复)

第 3 楼 啊山东if活泼啊额h11111 发表于: 2015-11-12 17:14 01
好例子,不错

支持(0) 盖楼(回复)

第 4 楼 youyou11111 发表于: 2015-11-14 17:26 50
我来说两句...hen hao

支持(0) 盖楼(回复)

第 5 楼 rlacjf133 发表于: 2015-11-27 09:26 09
下载事实

支持(0) 盖楼(回复)

第 6 楼 dkxiao 发表于: 2016-01-08 12:20 50
下载事实

支持(0) 盖楼(回复)

第 7 楼 Cayenne 发表于: 2016-03-03 11:33 53
下载看看

支持(0) 盖楼(回复)

第 8 楼 Cayenne 发表于: 2016-03-03 11:33 59
下载看看

支持(0) 盖楼(回复)

第 9 楼 Cayenne 发表于: 2016-03-03 11:34 01
下载看看

支持(0) 盖楼(回复)

第 10 楼 roly 发表于: 2016-04-08 14:05 27
感觉很好,就是不能下载

支持(0) 盖楼(回复)

第 11 楼 xiao y 发表于: 2016-05-14 02:55 34
很不错(*๓´╰╯`๓)♡

支持(0) 盖楼(回复)

第 12 楼 菜鸟.程序猿 发表于: 2016-05-24 16:18 54
为什么不能下载,这么好不给免费啊

支持(0) 盖楼(回复)

第 13 楼 w1323299500 发表于: 2016-09-14 14:07 09
可以的

支持(0) 盖楼(回复)

第 14 楼 w1323299500 发表于: 2016-09-14 14:07 11
可以的

支持(0) 盖楼(回复)

第 15 楼 13241855414 发表于: 2016-10-10 17:03 16
不错啊

支持(0) 盖楼(回复)

第 16 楼 13241855414 发表于: 2016-10-10 17:03 32
我来说两句...不错

zgy 2015-11-07 22:54 32

很好的例子。

支持(0) 盖楼(回复)

第 17 楼 paocai 发表于: 2016-11-07 18:10 45
下载看看

支持(0) 盖楼(回复)

第 18 楼 kb_001 发表于: 2016-12-06 19:58 54
但是对方身份的

支持(0) 盖楼(回复)

第 19 楼 wh123326841 发表于: 2016-12-12 14:43 41
非常好的例子

支持(0) 盖楼(回复)

发表评论

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

查看所有19条评论>>

小贴士

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

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