我有一个问题已经好几个星期了,但仍然无法解决,做了很多研究并测试了许多代码,但没有解决。我将详细解释我的问题。
我正在制作一个应用程序,其中在布局中将有三张或更多可点击的照片,我正在使用“ ArthurHub / Android-Image-Cropper”图像裁剪库,步骤为:
- 单击图像,它提供打开图像画廊的选项来选择照片或拍摄新照片,然后我可以裁剪选定的图像。
- 选择第二张照片,此后与上一张相同。
- 将照片上传到服务器。
步骤1正常运行,当我尝试从第二张图像中进行选择时出现问题。我正在使用什么:我正在使用两个类:一个请求图像的类和一个返回图像的类:1.将是带有ImageButton的主窗口。2.和另一个将所选图像返回到第一类的类。 (包含调用图库或照相机,剪切图像的功能,以及另一个“ onActivityResult”功能,该功能返回图像地址,并要求提供图片)。到目前为止,一切正常。
问题描述:问题出在所选的第二张图像上。当第二个类将所有内容返回到第一个图像时,就好像第二个图像存储在与第一个图像相同的内存空间中(以前擦除了所有内容),如果我选择了第三个图像,它将删除第二个图像而仅保留第三个图像从今以后。我要做的是选择图像,并同时查看所有图像(可用)以发送到服务器。
我尝试过的解决方案:
- 经过几天的搜索,建议对“ onActivityResult”进行多次返回,以便返回选择结果图片,我找不到任何有效的方法,我发现的解释只是中途(包括官方文档未详细说明控制各种退货的步骤功能,非常肤浅),无法控制单独指向图像。
switch (requestCode){
case (1000):
Intent intent1 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
intent1.putExtra("class", classname);
intent1.putExtra("imageview", imageview);
intent1.putExtra("pathimage", pathimage);
startActivity(intent1);
break;
case (2000):
Intent intent2 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
intent2.putExtra("class", classname);
intent2.putExtra("imageview", imageview);
intent2.putExtra("pathimage", pathimage);
startActivity(intent2);
case (3000):
Intent intent3 = new Intent(TirarFoto1.this, RegistrarAutomovelDuasRodas.class);
intent3.putExtra("class", classname);
intent3.putExtra("imageview", imageview);
intent3.putExtra("pathimage", pathimage);
startActivity(intent3);
break;
default: break;
}
- 我决定将每个图像分别保存在“临时缓存”文件夹(位于它们所在的位置)之外,即使使用“清单”权限,什么都没有发生,权限被拒绝,所以我什至无法创建新文件夹以将图像保存在其中,因此不会保存选择的图像。
if (ContextCompat.checkSelfPermission(TirarFoto1.this,Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED){
File file = new File(Environment.getExternalStoragePublicDirectory(String.valueOf(imageUri))+"folderName");
if (!file.exists()){
Toast.makeText(this, "exists", Toast.LENGTH_SHORT).show();
}
if (success){
Toast.makeText(this, "creaty", Toast.LENGTH_SHORT).show();
}else {
Toast.makeText(this, "Erro!!!", Toast.LENGTH_SHORT).show();
}
}else {
requestStoragePermisson();
}
结果:第一个解决方案无效,第二个解决方案无效。我想要的是:一个模型,一种帮助我的具体方法,有人可以帮助我吗?我已经在这个问题上困扰了很长时间。
我将ArthurHub-Android-Image-Cropper用于裁剪图像,您可以从此链接中学习
https://github.com/ArthurHub/Android-Image-Cropper/wiki
希望获得帮助
编辑:我有一个使用ArthurHub-Android-Image-Cropper的类,但来自kotlin,我尝试转换为Java像这样
//for identify image
private Int imageNo;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//......
//set button image 1
final Button button1 = findViewById(R.id.button_image1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// set image count to 1
imageNo=1
getImageClick()
}
});
//set button image 2
final Button button1 = findViewById(R.id.button_image1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// set image count to 2
imageNo=2
getImageClick()
}
});
//set button image 3
final Button button1 = findViewById(R.id.button_image1);
button1.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// set image count to 3
imageNo=3
getImageClick()
}
});
}
//select image form camera or galery
public void getImageClick() {
CropImage.startPickImageActivity(this);
}
//this for Crope Image
private void startCropImageActivity(Uri imageUri) {
CropImage.activity(imageUri)
.start(this);
}
@Override
@SuppressLint("NewApi")
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//handle result from onGetimageClick(button for select image from camera or galery)
if (requestCode == CropImage.PICK_IMAGE_CHOOSER_REQUEST_CODE && resultCode == AppCompatActivity.RESULT_OK) {
Uri imageUri = CropImage.getPickImageResultUri(this, data);
//start Crope image
startCropImageActivity(imageUri);
}
// handle result of CropImageActivity
else if (requestCode == CropImage.CROP_IMAGE_ACTIVITY_REQUEST_CODE && resultCode == Activity.RESULT_OK) {
CropImage.ActivityResult result = CropImage.getActivityResult(data);
Uri resultUri = result.getUri();
switch (imageNo){
case (1):
//here you have resultUri for save image or preview as image1
break;
case (2):
//here you have resultUri for save image or preview as image1
case (3):
//here you have resultUri for save image or preview as image1
}
}
}
不要忘记添加清单
<activity android:name="com.theartofdev.edmodo.cropper.CropImageActivity"
android:theme="@style/Theme.AppCompat"/>
希望此帮助