Решение:
Я использую библиотеку Multi-Picker для использования галереи Фото и выбора фотографий. После выбора фотографии я открываю фотографию в библиотека ucrop .
, помещенная ниже класса в вашем проекте.
В соответствии с кодом:
private String filePath;
private ImagePicker imagePicker;
private CameraImagePicker cameraImagePicker;
private void pickImage() {
//showProgressBarWithoutHide();
if (AppUtils.isValidContext(activity)) {
imagePicker = new ImagePicker(activity);
imagePicker.setImagePickerCallback(pickerCallback);
//imagePicker.allowMultiple(); // Default is false
imagePicker.shouldGenerateMetadata(false); // Default is true
imagePicker.shouldGenerateThumbnails(false); // Default is true
imagePicker.pickImage();
}
}
private void cameraImg() {
if (AppUtils.isValidContext(activity)) {
if (!SystemUtils.checkForCamera(activity)) {
Snackbar.make(btnAddToGallery, "Your device doesn't support camera", Snackbar.LENGTH_LONG).show();
return;
}
cameraImagePicker = new CameraImagePicker(activity);
cameraImagePicker.setImagePickerCallback(pickerCallback);
cameraImagePicker.shouldGenerateMetadata(false); // Default is true
cameraImagePicker.shouldGenerateThumbnails(false); // Default is true
filePath = cameraImagePicker.pickImage();
Log.i(TAG, "filepath: " + filePath);
}
}
ImagePickerCallback pickerCallback = new ImagePickerCallback() {
@Override
public void onImagesChosen(List<ChosenImage> list) {
try {
Log.i(TAG, "onImagesChosen() " + list.size());
if (list.size() == 0) {
Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
return;
}
final ChosenImage chosenImage = list.get(0);
if (AppUtils.isValidContext(activity) && isAdded()) {
activity.runOnUiThread(new Runnable() {
@Override
public void run() {
if (chosenImage != null) {
Log.i(TAG, "getOriginalPath Path:" + chosenImage.getOriginalPath());
validateImagePath(chosenImage.getOriginalPath());
} else {
//hideProgressBar();
Snackbar.make(btnAddToGallery, "Failed to choose image", Snackbar.LENGTH_LONG).show();
Log.e(TAG, "Failed to choose image");
}
}
});
}
} catch (Throwable th) {
th.printStackTrace();
}
}
@Override
public void onError(String s) {
//hideProgressBar();
}
};
private void validateImagePath(String imagePath) {
String ext = FileUtils.getFileExtension(imagePath);
Log.i(TAG, "EXT: " + ext);
if (ext.equals("jpg") || ext.equals("png") || ext.equals("jpeg")) {
if (imagePath != null) {
File file = new File(imagePath);
long length = file.length();
Log.i(TAG, "File size is: " + length);
if (length > Constants.MAX_IMAGE_FILE_SIZE) {
//hideProgressBar();
Snackbar.make(btnAddToGallery, getString(R.string.err_img_too_large), Snackbar.LENGTH_LONG).show();
FileUtils.deleteFileFromPath(filePath);
return;
}
filePath = imagePath;
PerformCrop();
} else {
//hideProgressBar();
Toast.makeText(activity, R.string.err_failed_to_pick_img, Toast.LENGTH_SHORT).show();
}
} else {
//hideProgressBar();
Snackbar.make(btnAddToGallery, "Please select valid file.", Snackbar.LENGTH_LONG).show();
Log.e(TAG, "Please select valid file");
}
}
openCropActivity:
private void PerformCrop() {
try {
Uri sourceUri = Uri.parse("file://" + filePath);
Uri destUri = Uri.fromFile(new File(activity.getFilesDir(), "U_Crop_Image_" + System.currentTimeMillis() + ".png"));
UCrop uCrop = UCrop.of(sourceUri, destUri); //Uri.fromFile(new File(getCacheDir(), destinationFileName))
uCrop = basisConfig(uCrop);
uCrop = advancedConfig(uCrop);
uCrop.start(activity);
} catch (Throwable e) {
e.printStackTrace();
}
}
onActivityResult:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case Picker.PICK_IMAGE_DEVICE:
if (resultCode == Activity.RESULT_OK && data != null) {
if (imagePicker == null && AppUtils.isValidContext(activity)) {
imagePicker = new ImagePicker(activity);
imagePicker.setImagePickerCallback(pickerCallback);
}
if (imagePicker != null) {
imagePicker.submit(data);
}
} else {
Log.e(TAG, "PICK_IMAGE_DEVICE intent is null or result code is " + resultCode);
}
break;
case Picker.PICK_IMAGE_CAMERA:
if (resultCode == Activity.RESULT_OK && data != null) {
if (cameraImagePicker == null && AppUtils.isValidContext(activity)) {
cameraImagePicker = new CameraImagePicker(activity);
cameraImagePicker.reinitialize(filePath);
// OR in one statement
// imagePicker = new CameraImagePicker(Activity.getActivity(), outputPath);
cameraImagePicker.setImagePickerCallback(pickerCallback);
}
if (cameraImagePicker != null) {
cameraImagePicker.submit(data);
}
} else {
Log.e(TAG, "PICK_IMAGE_CAMERA intent is null or result code is " + resultCode);
if (filePath != null && filePath.length() > 0) {
PerformCrop();
} else {
Snackbar.make(btnAddToGallery, R.string.err_failed_to_pick_img, Snackbar.LENGTH_LONG).show();
}
}
break;
case UCrop.REQUEST_CROP:
if (resultCode == Activity.RESULT_OK) {
final Uri resultUri = UCrop.getOutput(data);
Log.e(TAG, "Cropped image: " + resultUri);
try {
if (resultUri != null && resultUri.toString().length() > 0) {
/* Remove dummy image */
// set crop Image...
}
} catch (Throwable e) {
e.printStackTrace();
}
//showCropAd();
} else if (resultCode == UCrop.RESULT_ERROR) {
try {
final Throwable cropError = UCrop.getError(data);
if (cropError != null && cropError.getMessage() != null) {
Log.e(TAG, "cropError: " + cropError.getMessage());
}
} catch (Throwable e) {
e.printStackTrace();
}
}
break;
}
}
Результат:
Демонстрация моего приложенияПосле изображения:



ЭтоКод только для справки. Если у вас все еще есть проблемы, пожалуйста, дайте мне знать. Рад помочь вам.