ImageView显示拍照or本地图片
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 android:paddingBottom="@dimen/activity_vertical_margin" 7 android:paddingLeft="@dimen/activity_horizontal_margin" 8 android:paddingRight="@dimen/activity_horizontal_margin" 9 android:paddingTop="@dimen/activity_vertical_margin" 10 tools:context="com.example.imageview.MainActivity" > 11 12 <Button 13 android:layout_width="fill_parent" 14 android:layout_height="wrap_content" 15 android:text="选择图片" 16 android:id="@+id/selectImage" 17 /> 18 <Button 19 android:layout_width="fill_parent" 20 android:layout_height="wrap_content" 21 android:text="拍照图片" 22 android:id="@+id/captureImage" 23 /> 24 <ImageView 25 android:id="@+id/imageView" 26 android:maxHeight="1000dip" 27 android:maxWidth="1000dip" 28 android:layout_width="200dp" 29 android:layout_height="200dp" 30 android:layout_gravity="center_horizontal" 31 android:scaleType="fitCenter" /> 32 33 </LinearLayout>
1 package com.example.imageview; 2 3 import java.io.ByteArrayOutputStream; 4 import java.io.File; 5 import java.io.IOException; 6 7 import android.app.Activity; 8 import android.app.AlertDialog; 9 import android.app.AlertDialog.Builder; 10 import android.app.Dialog; 11 import android.content.ContentResolver; 12 import android.content.DialogInterface; 13 import android.content.Intent; 14 import android.database.Cursor; 15 import android.graphics.Bitmap; 16 import android.graphics.BitmapFactory; 17 import android.net.Uri; 18 import android.os.Bundle; 19 import android.os.Environment; 20 import android.provider.MediaStore; 21 import android.util.Log; 22 import android.view.Menu; 23 import android.view.MenuItem; 24 import android.view.View; 25 import android.view.View.OnClickListener; 26 import android.widget.Button; 27 import android.widget.ImageView; 28 import android.widget.Toast; 29 30 31 public class MainActivity extends Activity implements OnClickListener { 32 33 private Button selectImage, uploadImage,captureImage; 34 private ImageView imageView; 35 private Bitmap photo = null; 36 private String picPath = null; 37 private File file = null; 38 39 @Override 40 protected void onCreate(Bundle savedInstanceState) { 41 super.onCreate(savedInstanceState); 42 setContentView(R.layout.activity_main); 43 44 selectImage = (Button) this.findViewById(R.id.selectImage); 45 captureImage=(Button) this.findViewById(R.id.captureImage); 46 selectImage.setOnClickListener(this); 47 uploadImage.setOnClickListener(this); 48 captureImage.setOnClickListener(this); 49 imageView = (ImageView) this.findViewById(R.id.imageView); 50 } 51 52 @Override 53 public void onClick(View v) { 54 // TODO Auto-generated method stub 55 switch (v.getId()) { 56 case R.id.selectImage: 57 Intent intent = new Intent(); 58 intent.setType("image/*"); 59 intent.setAction(Intent.ACTION_GET_CONTENT); 60 startActivityForResult(intent, 1); 61 break; 62 case R.id.captureImage: //照相后显示图片 63 destoryBimap(); 64 String state = Environment.getExternalStorageState(); 65 if (state.equals(Environment.MEDIA_MOUNTED)) { 66 String saveDir = Environment.getExternalStorageDirectory() 67 + "/temple"; 68 File dir = new File(saveDir); 69 if (!dir.exists()) { 70 dir.mkdir(); 71 } 72 file = new File(saveDir, "temp.jpg"); 73 file.delete(); 74 if (!file.exists()) { 75 try { 76 file.createNewFile(); 77 } catch (IOException e) { 78 e.printStackTrace(); 79 Toast.makeText(this,"创建临时文件失败",Toast.LENGTH_LONG).show(); 80 return; 81 } 82 } 83 Intent intents = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); 84 intents.putExtra(MediaStore.EXTRA_OUTPUT, Uri.fromFile(file)); 85 startActivityForResult(intents, 2); 86 } else { 87 Toast.makeText(this,"存储卡不存在" , Toast.LENGTH_LONG) .show(); 88 } 89 break; 90 default: 91 break; 92 } 93 } 94 95 private void destoryBimap() 96 { 97 imageView.setImageBitmap(null); 98 if (photo != null && !photo.isRecycled()) { 99 photo.recycle(); //回收内存,一定要将 imageView中图片设置成null 100 photo = null; 101 } 102 } 103 104 @Override 105 protected void onActivityResult(int requestCode, int resultCode, Intent data) { 106 if (requestCode ==1) { 107 if (data != null) { 108 Uri uri = data.getData(); 109 try { 110 String[] pojo = { MediaStore.Images.Media.DATA }; 111 Cursor cursor = getContentResolver().query(uri, pojo, null, null, null); 112 ContentResolver cr = this.getContentResolver(); 113 int colunm_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); 114 cursor.moveToFirst(); 115 String path = cursor.getString(colunm_index); 116 117 if (path.endsWith("jpg") || path.endsWith("png")) { 118 picPath = path; 119 Log.e("图片路径", picPath); 120 121 //Bitmap bitmap = BitmapFactory.decodeStream(cr.openInputStream(uri)); 122 //imageView.setImageBitmap(bitmap); 123 //Bitmap bitmap = MediaStore.Images.Media.getBitmap(cr, uri); 124 125 Bitmap bitmap = BitmapFactory.decodeFile(picPath); 126 imageView.setImageBitmap(bitmap); 127 Toast.makeText(this, "图片路径"+ picPath, 1000).show(); 128 } 129 else { 130 alert("您选择的不是有效的图片"); 131 } 132 } catch (Exception e) { 133 alert("选择图片错误"); 134 } 135 } 136 else{ 137 alert("data is null"); 138 } 139 } 140 else if (requestCode ==2){ //拍照后执行 141 if (file != null && file.exists()) { 142 BitmapFactory.Options options = new BitmapFactory.Options(); 143 options.inSampleSize = 2; 144 photo = BitmapFactory.decodeFile(file.getPath(), options); 145 imageView.setImageBitmap(photo); 146 //picPath = file.getPath(); 147 } else { 148 alert("拍照错误"); 149 } 150 } 151 152 super.onActivityResult(requestCode, resultCode, data); 153 } 154 155 private void alert(String str) { 156 Dialog dialog = new AlertDialog.Builder(this).setTitle("提示") 157 .setMessage(str) 158 .setPositiveButton("确定", new DialogInterface.OnClickListener() { 159 public void onClick(DialogInterface dialog, int which) { 160 picPath = null; 161 } 162 }).create(); 163 dialog.show(); 164 } 165 }
1 <?xml version="1.0" encoding="utf-8"?> 2 <manifest xmlns:android="http://schemas.android.com/apk/res/android" 3 package="com.example.imageview" 4 android:versionCode="1" 5 android:versionName="1.0" > 6 7 <uses-sdk 8 android:minSdkVersion="16" 9 android:targetSdkVersion="18" /> 10 11 <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> 12 <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/> 13 14 <application 15 android:allowBackup="true" 16 android:icon="@drawable/ic_launcher" 17 android:label="@string/app_name" 18 android:theme="@style/AppTheme" > 19 <activity 20 android:name=".MainActivity" 21 android:label="@string/app_name" > 22 <intent-filter> 23 <action android:name="android.intent.action.MAIN" /> 24 25 <category android:name="android.intent.category.LAUNCHER" /> 26 </intent-filter> 27 </activity> 28 </application> 29 30 </manifest>