当前位置: 代码迷 >> Android >> android 开启本土相册选择图片并返回显示
  详细解决方案

android 开启本土相册选择图片并返回显示

热度:91   发布时间:2016-04-28 01:18:42.0
android 开启本地相册选择图片并返回显示

.java

  1 package com.jerry.crop;  2   3 import java.io.File;  4   5 import android.app.Activity;  6 import android.content.Intent;  7 import android.graphics.Bitmap;  8 import android.net.Uri;  9 import android.os.Bundle; 10 import android.os.Environment; 11 import android.provider.MediaStore; 12 import android.view.View; 13 import android.widget.ImageView; 14 import android.widget.Toast; 15  16 public class MainActivity extends Activity { 17  18     private static final int PHOTO_REQUEST_CAREMA = 1;// 拍照 19     private static final int PHOTO_REQUEST_GALLERY = 2;// 从相册中选择 20     private static final int PHOTO_REQUEST_CUT = 3;// 结果 21  22     private ImageView iv_image; 23  24     /* 头像名称 */ 25     private static final String PHOTO_FILE_NAME = "temp_photo.jpg"; 26     private File tempFile; 27  28     @Override 29     protected void onCreate(Bundle savedInstanceState) { 30         super.onCreate(savedInstanceState); 31         setContentView(R.layout.activity_main); 32         this.iv_image = (ImageView) this.findViewById(R.id.iv_image); 33     } 34  35     /* 36      * 从相册获取 37      */ 38     public void gallery(View view) { 39         // 激活系统图库,选择一张图片 40         Intent intent = new Intent(Intent.ACTION_PICK); 41         intent.setType("image/*"); 42         // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_GALLERY 43         startActivityForResult(intent, PHOTO_REQUEST_GALLERY); 44     } 45  46     /* 47      * 从相机获取 48      */ 49     public void camera(View view) { 50         // 激活相机 51         Intent intent = new Intent("android.media.action.IMAGE_CAPTURE"); 52         // 判断存储卡是否可以用,可用进行存储 53         if (hasSdcard()) { 54             tempFile = new File(Environment.getExternalStorageDirectory(), 55                     PHOTO_FILE_NAME); 56             // 从文件中创建uri 57             Uri uri = Uri.fromFile(tempFile); 58             intent.putExtra(MediaStore.EXTRA_OUTPUT, uri); 59         } 60         // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CAREMA 61         startActivityForResult(intent, PHOTO_REQUEST_CAREMA); 62     } 63  64     /* 65      * 剪切图片 66      */ 67     private void crop(Uri uri) { 68         // 裁剪图片意图 69         Intent intent = new Intent("com.android.camera.action.CROP"); 70         intent.setDataAndType(uri, "image/*"); 71         intent.putExtra("crop", "true"); 72         // 裁剪框的比例,1:1 73         intent.putExtra("aspectX", 1); 74         intent.putExtra("aspectY", 1); 75         // 裁剪后输出图片的尺寸大小 76         intent.putExtra("outputX", 250); 77         intent.putExtra("outputY", 250); 78  79         intent.putExtra("outputFormat", "JPEG");// 图片格式 80         intent.putExtra("noFaceDetection", true);// 取消人脸识别 81         intent.putExtra("return-data", true); 82         // 开启一个带有返回值的Activity,请求码为PHOTO_REQUEST_CUT 83         startActivityForResult(intent, PHOTO_REQUEST_CUT); 84     } 85  86     /* 87      * 判断sdcard是否被挂载 88      */ 89     private boolean hasSdcard() { 90         if (Environment.getExternalStorageState().equals( 91                 Environment.MEDIA_MOUNTED)) { 92             return true; 93         } else { 94             return false; 95         } 96     } 97  98     @Override 99     protected void onActivityResult(int requestCode, int resultCode, Intent data) {100         if (requestCode == PHOTO_REQUEST_GALLERY) {101             // 从相册返回的数据102             if (data != null) {103                 // 得到图片的全路径104                 Uri uri = data.getData();105                 crop(uri);106             }107 108         } else if (requestCode == PHOTO_REQUEST_CAREMA) {109             // 从相机返回的数据110             if (hasSdcard()) {111                 crop(Uri.fromFile(tempFile));112             } else {113                 Toast.makeText(MainActivity.this, "未找到存储卡,无法存储照片!", 0).show();114             }115 116         } else if (requestCode == PHOTO_REQUEST_CUT) {117             // 从剪切图片返回的数据118             if (data != null) {119                 Bitmap bitmap = data.getParcelableExtra("data");120                 this.iv_image.setImageBitmap(bitmap);121             }122             try {123                 // 将临时文件删除124                 tempFile.delete();125             } catch (Exception e) {126                 e.printStackTrace();127             }128 129         }130 131         super.onActivityResult(requestCode, resultCode, data);132     }133 }

.xml

 1 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 2     xmlns:tools="http://schemas.android.com/tools" 3     android:layout_width="match_parent" 4     android:layout_height="match_parent" 5     android:orientation="vertical" 6     tools:context=".MainActivity" > 7  8     <Button 9         android:layout_width="wrap_content"10         android:layout_height="wrap_content"11         android:onClick="gallery"12         android:text="获取图库图片" />13     <Button14         android:layout_width="wrap_content"15         android:layout_height="wrap_content"16         android:onClick="camera"17         android:text="拍照获取图片" />18 19     <ImageView20         android:id="@+id/iv_image"21         android:layout_width="wrap_content"22         android:layout_height="wrap_content" />23 24 </LinearLayout>

 

效果图:

 

  相关解决方案