基本这个功能都是在头像设置的时候会用到
Android 从相机拍完照片 然后跳去系统自带的裁剪 或者从相册选取图片裁剪 然后把裁剪好的图片设置成头像
这里直接贴上跳到裁剪部分的代码
private void photoClip(Uri uri) {
// 调用系统中自带的图片剪裁
Intent intent = new Intent("com.android.camera.action.CROP");
intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION | Intent.FLAG_GRANT_WRITE_URI_PERMISSION);
intent.setDataAndType(uri, "image/*");
// 下面这个crop=true是设置在开启的Intent中设置显示的VIEW可裁剪
intent.putExtra("crop", "true");
intent.putExtra("scale", true);
// aspectX aspectY 是宽高的比例
//这个是处理华为裁剪是圆形框的问题
if (Build.MANUFACTURER.equals("HUAWEI")) {
intent.putExtra("aspectX", 9998);
intent.putExtra("aspectY", 9999);
} else {
intent.putExtra("aspectX", 1);
intent.putExtra("aspectY", 1);
}
// outputX outputY 是裁剪图片宽高 这个值越大清晰度越高 但是太大了会崩
intent.putExtra("outputX", 800);
intent.putExtra("outputY", 800);
intent.putExtra("return-data", false);
uritempFile = Uri.parse("file://" + "/" + Environment.getExternalStorageDirectory().getPath() + "/" + System.currentTimeMillis() + ".jpg");
intent.putExtra(MediaStore.EXTRA_OUTPUT, uritempFile);
intent.putExtra("outputFormat", Bitmap.CompressFormat.JPEG.toString());
intent.putExtra("noFaceDetection", true);
startActivityForResult(intent, CLIP_PHOTO_BY_SELF_REQUEST_CODE);
}
注释都写了 然后下面是在onActivityResult里面获取裁剪之后图片的方法
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode != RESULT_OK) return;
switch (requestCode) {
case CLIP_PHOTO_BY_SELF_REQUEST_CODE:
if (uritempFile != null) {
bitmap = decodeUriBitmap(uritempFile);
}
}
break;
}
}
private Bitmap decodeUriBitmap(Uri uri) {
Bitmap bitmap = null;
try {
bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri));
} catch (FileNotFoundException e) {
e.printStackTrace();
return null;
}
return bitmap;
}
大功告成