我有一个功能如下的应用:
用户打开应用程序 ->活动包含一个图像视图,当单击时... ->用cropper打开图像查看器 ->根据所选图像的URI
更改图像视图中的图像这一切都起作用。我只是注意到,在加载完整分辨率的图像时,我的应用程序滞后,有时会崩溃。这可能是由于图像的大小/分辨率,我不知道如何修复。
我的代码:
private void goSelectImage(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M){
if (ContextCompat.checkSelfPermission(CompleteProfileActivity.this, android.Manifest.permission.READ_EXTERNAL_STORAGE)!= PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "Access Denied", Toast.LENGTH_LONG).show();
ActivityCompat.requestPermissions(CompleteProfileActivity.this, new String[]{android.Manifest.permission.READ_EXTERNAL_STORAGE},1);
} else {
BringImagePicker();
}
} else {
BringImagePicker();
}
}
private void BringImagePicker() {
// start picker to get image for cropping and then use the image in cropping activity
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.setAspectRatio(1,1)
.start(CompleteProfileActivity.this);
}
//CROP FUNCTIONALITY - ESSENTIAL
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
if (resultCode == RESULT_OK) {
mainImageUri = result.getUri();
//Bitmap bitmap = BitmapFactory.decodeResource(mainImageUri);
imgProfile.setImageURI(mainImageUri);
//isChanged = true;
} else if (resultCode == CropImage.CROP_IMAGE_ACTIVITY_RESULT_ERROR_CODE) {
Exception error = result.getError();
}
}
}
注意到我尝试了Bitmap bitmap = BitmapFactory.decodeResource(mainImageUri);
,但没有奏效。是否有任何代码可以帮助我减少图像视图中图像的显示分辨率?很抱歉问这个广泛的问题,我刚刚从Android Studio开始。
您对imgProfile.setImageURI(mainImageUri);
的调用将从UI线程解码位图。
https://developer.android.com/reference/android/widget/imageview.html#setimageuri(android.net.uri(
>请参阅官方文档以了解如何有效加载位图:
https://developer.android.com/topic/performance/graphics/load-bitmap.html