
接下来主要来讲解一下代码:
1. 弹框选择相册或拍照
比较简单的方式就是直接使用AlertDialog弹出选项供用户进行选择
public static void showImagePickDialog(final Activity activity){ String title = "选择获取图片方式"; String[] items = new String[]{"拍照","相册"}; new AlertDialog.Builder(activity).setTitle(title).setItems(items, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.dismiss(); switch (which){ case 0: //选择拍照 pickImageFromCamera(activity); break; case 1: //选择相册 pickImageFromAlbum(activity); break; default: break;} }}).show(); }
2. 调用系统相机
在调用系统相机前,我们需要传入自定义路径的图片Uri,指定拍照的图片存放在这个Uri下,如果直接在返回时使用getData()获取的是压缩过的Bitmap数据
public static void pickImageFromCamera(final Activity activity){ //获得指定路径的Uri imageUriFromCamera = getImageUri(); Intent intent = new Intent(); intent.setAction(MediaStore.ACTION_IMAGE_CAPTURE); intent.putExtra(MediaStore.EXTRA_OUTPUT,imageUriFromCamera); activity.startActivityForResult(intent,REQUEST_CODE_FROM_CAMERA);}3. 打开系统相册public static void pickImageFromAlbum(final Activity activity){//隐式调用,可能出现多种选择Intent intent = new Intent();intent.setAction(Intent.ACTION_GET_CONTENT);intent.setType("image/*");activity.startActivityForResult(intent,REQUEST_CODE_FROM_ALBUM);}4. 对返回图片Uri进行裁剪工作@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);switch (requestCode){ case ImageUtils.REQUEST_CODE_FROM_ALBUM: {if (resultCode == RESULT_CANCELED) { //取消操作 return;}Uri imageUri = data.getData();ImageUtils.copyImageUri(this,imageUri); //复制图片ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪图片break; } case ImageUtils.REQUEST_CODE_FROM_CAMERA: {if (resultCode == RESULT_CANCELED) { //取消操作 ImageUtils.deleteImageUri(this, ImageUtils.getCurrentUri()); //删除Uri}ImageUtils.cropImageUri(this, ImageUtils.getCurrentUri(), 200, 200); //裁剪图片break; } case ImageUtils.REQUEST_CODE_CROP: {if (resultCode == RESULT_CANCELED) { //取消操作 return;}Uri imageUri = ImageUtils.getCurrentUri();if (imageUri != null) { imageView.setImageURI(imageUri); //显示图片}break; } default:break;} }以上只给了部分代码,需要完整代码的同学可以到GitHub上下载: