ImageView显示选择本地图片或拍照

最近写项目,遇到了,在此记录一下。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, nullnullnull);                   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;    }          }  

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/ppwff.html