У меня есть кнопка для выбора изображения, которое отображает предварительный просмотр выбранного изображения, все работает нормально, за исключением того, что если пользователь щелкнет снова перед отправкой изображения, я бы хотел, чтобы предварительный просмотр обновился. Я не уверен, какие строки кода мне нужно показать (не понимая, в чем проблема), поэтому не стесняйтесь спрашивать.
Я не сбрасываю картинку, когда нажата кнопка отправки, но она работает.
Я использовал imageButton для первого клика и imageView для второго клика (оба кода onClick похожи).
(Бонусный вопрос пользователь может выбрать jpg и png, он работает, но я не уверен, что мой код подходит для этого).
Заранее благодарю за внимание и помощь.
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == REQUEST_IMAGE_CAPTURE || requestCode == REQUEST_GALLERY_IMAGE) {
if (resultCode == RESULT_OK) {
selectedImageUri = data.getData();
if (selectedImageUri != null) {
UCrop.Options options = new UCrop.Options();
options.setCompressionFormat(Bitmap.CompressFormat.PNG);
options.setCompressionQuality(100);
options.setShowCropGrid(true);
UCrop.of(selectedImageUri, Uri.fromFile(new File(getCacheDir(), "pic.png")))
.withAspectRatio(1, 1)
.withOptions(options)
.start(this);
}
}
}
if (requestCode == UCrop.REQUEST_CROP) {
if (resultCode == RESULT_OK) {
progresspicbar.setVisibility(View.VISIBLE);
selectedImageUri = UCrop.getOutput(data);
try {
File compressedFile = new Compressor(this).setCompressFormat(Bitmap.CompressFormat.PNG).setQuality(50).setMaxHeight(96).setMaxWidth(96).compressToFile(new File(selectedImageUri.getPath()));
mPhotoPreview.setVisibility(View.VISIBLE);
mPhotoPreview.setImageURI(Uri.fromFile(compressedFile));
mPhotoPickerButton.setVisibility(View.GONE);
storageReference.putFile(selectedImageUri).addOnCompleteListener(new OnCompleteListener<UploadTask.TaskSnapshot>() {
@Override
public void onComplete(@NonNull final Task<UploadTask.TaskSnapshot> task) {
if (task.isSuccessful()) {
storageReference.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
mPhotoUrl = uri.toString();
progresspicbar.setVisibility(GONE);
mSendButton.setEnabled(true);
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
progresspicbar.setVisibility(GONE);
if (mPhotoUrl.isEmpty()) {
if (mPhotoPreview.getVisibility() == View.VISIBLE) {
mSendButton.setEnabled(false);
mPhotoPreview.setVisibility(GONE);
mPhotoPickerButton.setVisibility(View.VISIBLE);
}
}
}
});
} else if (mPhotoUrl.isEmpty()) {
progresspicbar.setVisibility(GONE);
if (mPhotoPreview.getVisibility() == View.VISIBLE) {
mSendButton.setEnabled(false);
mPhotoPreview.setVisibility(GONE);
mPhotoPickerButton.setVisibility(View.VISIBLE);
}
}
}
});
} catch (IOException e) {
progresspicbar.setVisibility(GONE);
e.printStackTrace();
}
} else if (resultCode == UCrop.RESULT_ERROR) {
progresspicbar.setVisibility(GONE);
Log.e("Error", "Crop error:" + Objects.requireNonNull(UCrop.getError(data)).getMessage());
}
}
}