基本這個功能都是在頭像設置的時候會用到
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;
}
大功告成