Android 從本地選取圖片或者拍照填充ImageView

yangxi_001發表於2014-07-02
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);  
        }
          
    }  

相關文章