最近写项目,遇到了,在此记录一下。Android-ImageView显示选择本地图片或拍照.
import java.io.ByteArrayOutputStream; import java.io.InputStream; import android.app.Activity; import android.app.AlertDialog; import android.content.ContentResolver; import android.content.DialogInterface; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.net.Uri; import android.os.Bundle; import android.provider.MediaStore; import android.view.View; import android.view.View.OnClickListener; import android.widget.ImageView; public class PicChooserActivity extends Activity { /** Called when the activity is first created. */ private ImageView imageView; private OnClickListener imgViewListener; private Bitmap myBitmap; private byte[] mContent; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); imageView =(ImageView) findViewById(R.id.ivPic); imageView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { // TODO Auto-generated method stub final CharSequence[] items = { "相册", "拍照" }; AlertDialog dlg = new AlertDialog.Builder(PicChooserActivity.this).setTitle("选择照片").setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub //这里item是根据选择的方式, 在items数组里面定义了两种方式,拍照的下标为1所以就调用拍照方法 if(which==1){ Intent getImageByCamera = new Intent("android.media.action.IMAGE_CAPTURE"); startActivityForResult(getImageByCamera, 1); }else{ Intent getImage = new Intent(Intent.ACTION_GET_CONTENT); getImage.addCategory(Intent.CATEGORY_OPENABLE); getImage.setType("image/jpeg"); startActivityForResult(getImage, 0); } } }).create(); dlg.show(); } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { // TODO Auto-generated method stub super.onActivityResult(requestCode, resultCode, data); ContentResolver contentResolver =getContentResolver(); /** * 因为两种方式都用到了startActivityForResult方法,这个方法执行完后都会执行onActivityResult方法, * 所以为了区别到底选择了那个方式获取图片要进行判断,这里的requestCode跟startActivityForResult里面第二个参数对应 */ if(requestCode==0){ //方式一 /*try { //获得图片的uri Uri orginalUri = data.getData(); //将图片内容解析成字节数组 mContent = readStream(contentResolver.openInputStream(Uri.parse(orginalUri.toString()))); //将字节数组转换为ImageView可调用的Bitmap对象 myBitmap =getPicFromBytes(mContent,null); ////把得到的图片绑定在控件上显示 imageView.setImageBitmap(myBitmap); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception }*/ //方式二 try { Uri selectedImage = data.getData(); String[] filePathColumn = { MediaStore.Images.Media.DATA }; Cursor cursor = getContentResolver().query(selectedImage, filePathColumn, null, null, null); cursor.moveToFirst(); int columnIndex = cursor.getColumnIndex(filePathColumn[0]); String picturePath = cursor.getString(columnIndex); cursor.close(); imageView.setImageBitmap(BitmapFactory.decodeFile(picturePath)); } catch (Exception e) { // TODO: handle exception e.printStackTrace(); } }else if(requestCode==1){ try { Bundle extras = data.getExtras(); myBitmap = (Bitmap) extras.get("data"); ByteArrayOutputStream baos = new ByteArrayOutputStream(); myBitmap.compress(Bitmap.CompressFormat.JPEG , 100, baos); mContent=baos.toByteArray(); } catch (Exception e) { e.printStackTrace(); // TODO: handle exception } imageView.setImageBitmap(myBitmap); } } public static Bitmap getPicFromBytes(byte[] bytes, BitmapFactory.Options opts) { if (bytes != null) if (opts != null) return BitmapFactory.decodeByteArray(bytes, 0, bytes.length,opts); else return BitmapFactory.decodeByteArray(bytes, 0, bytes.length); return null; } public static byte[] readStream(InputStream in) throws Exception{ byte[] buffer =new byte[1024]; int len =-1; ByteArrayOutputStream outStream = new ByteArrayOutputStream(); while((len=in.read(buffer))!=-1){ outStream.write(buffer, 0, len); } byte[] data =outStream.toByteArray(); outStream.close(); in.close(); return data; } }ImageView显示选择本地图片或拍照
内容版权声明:除非注明,否则皆为本站原创文章。