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     <Button

14         android:layout_width="wrap_content"

15         android:layout_height="wrap_content"

16         android:onClick="camera"

17         android:text="拍照获取图片" />

18 

19     <ImageView

20         android:id="@+id/iv_image"

21         android:layout_width="wrap_content"

22         android:layout_height="wrap_content" />

23 

24 </LinearLayout>

 

效果图:

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

 

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

你可能感兴趣的:(android)