在xml中布入2个控件,一个Button,一个ImageView,就不在此赘述了。
在MainActivity中:
onCreate(){
takephoto=(Button)findViewById(R.id.photo); picture=(ImageView)findViewById(R.id.picture); takephoto.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { File outputImage=new File(Environment.getExternalStorageDirectory(), "output_image.jpg");//创建File对象,用于存储拍照后的图片,获取sd卡根目录 try{ if(outputImage.exists()){ outputImage.delete(); } outputImage.createNewFile(); }catch (IOException e){ e.printStackTrace(); } imageUri=Uri.fromFile(outputImage);//File对象转化为Uri对象 Intent intent=new Intent("android.media.action.IMAGE_CAPTURE"); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,TAKE_PHOTO); //启动相机程序 } }); }
@Override protected void onActivityResult(int requestCode,int resultCode,Intent data){ switch (requestCode){ case TAKE_PHOTO: if(resultCode==RESULT_OK){ Intent intent=new Intent("com.android.camera.action.CROP"); intent.setDataAndType(imageUri,"image/*"); intent.putExtra("scale",true); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUri); startActivityForResult(intent,CROP_PHOTO);//启动裁剪程序 } break; case CROP_PHOTO: if(resultCode==RESULT_OK){ try { Bitmap bitmap = BitmapFactory.decodeStream(getContentResolver().openInputStream(imageUri)); picture.setImageBitmap(bitmap); //将裁剪的照片显示出来 }catch (FileNotFoundException e){ e.printStackTrace(); } } break; default: break; } }这个项目涉及到向sd卡中写数据的操作,因此要在AndroidManifest。xml中声明权限:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>