Android 从本地选取图片或者拍照填充ImageView

photoView.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
final CharSequence[] items = { "相册", "拍照" };  
                
                AlertDialog dlg = new AlertDialog.Builder(CardFrontActivity.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){  
                                //拍照要先存入储存卡或者内存,否则读取图片会模糊
                                SimpleDateFormat sdf = new SimpleDateFormat(
                "yyyyMMddhhmmss");
                String nowdata = sdf.format(new Date());
                String pictureName = "_IMG_" + nowdata + ".jpg";
                photoPath = Environment.getExternalStorageDirectory()
                .getAbsolutePath() + "/DCIM/Camera/" + pictureName;
                Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
                intent.putExtra(MediaStore.EXTRA_OUTPUT,
                Uri.fromFile(new File(photoPath)));
                startActivityForResult(intent, 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 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();  
                photoView.setImageBitmap(BitmapFactory.decodeFile(picturePath));  
            } catch (Exception e) {  
                // TODO: handle exception   
                e.printStackTrace();  
            }  
              
              
        }else if(requestCode==1){  
            try {  
            BitmapFactory.Options opts = new BitmapFactory.Options();
    opts.inSampleSize=1;
    if(myBitmap!=null)
    myBitmap.recycle();
    myBitmap = BitmapFactory
    .decodeFile(photoPath,opts);
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    myBitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
            } catch (Exception e) {  
                e.printStackTrace();  
                // TODO: handle exception   
            }  
            photoView.setImageBitmap(myBitmap);  
        }
          
    }  

你可能感兴趣的:(Android 从本地选取图片或者拍照填充ImageView)