在按钮上单击从库中选择图像并在另一个活动的imageView中设置

时间:2018-06-03 03:48:35

标签: android

我有两个活动,其中一个我有一个按钮,第二个我有一个ImageView,现在我想如果我点击第一个活动的按钮然后我去画廊并选择一个图像,当我选择一个图像然后它会自动设置在第二个活动的ImageView中,当我在同一个活动的imageView中设置图像时,我的代码工作,但我想在第二个活动的ImageView中设置图像。请告诉我需要在SecondActivity中编写哪些代码,我的第一个活动是(Select_Image): -

public class Select_Image extends Activity {
Button button;
public static final int PICK_FROM_GALLERY = 100;
Bitmap bitmap;
String imagePath = " ";
Uri uri;
ImageView image;
String path = " ";
protected void onCreate(Bundle savedInstanceState){
    super.onCreate(savedInstanceState);
    setContentView(R.layout.select_image);
    button = (Button)findViewById(R.id.select_btn);
    image = (ImageView)findViewById(R.id.edit_image_id);  //This is second Activity's ImageView id.
    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            galleryIntent();
        }
    });
}
public void galleryIntent(){
    Intent intent = new Intent();
    intent.setType("image/*");
    intent.setAction(Intent.ACTION_GET_CONTENT);
    startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_FROM_GALLERY);
}

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (resultCode == MainActivity.RESULT_OK) {
        if (requestCode == PICK_FROM_GALLERY){
            }
            onSelectFromGalleryResult(data);
    }
}
public  void onSelectFromGalleryResult(Intent data){
    if (data != null) {
        try {
            bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), data.getData());
        }
        catch (Exception e) {
            e.printStackTrace();
        }
    }
    uri = getImageUri(this, bitmap);
    imagePath = getRealPathFromUri(uri);
    image.setImageBitmap(bitmap);
}

private String getRealPathFromUri(Uri uri) {
    Cursor cursor = null;
    try {
        String[] proj = {MediaStore.Images.Media.DATA};
        cursor = this.getContentResolver().query(uri, proj, null, null, null);
        int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
        cursor.moveToFirst();
        String ss = cursor.getString(column_index);
        return cursor.getString(column_index);
    } finally {
        if (cursor != null) {
            cursor.close();
        }
    }
}

private Uri getImageUri(Select_Image select_image, Bitmap bitmap) {
    ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    Toast.makeText(select_image, "Image uploaded Successfully", Toast.LENGTH_LONG).show();
    path = MediaStore.Images.Media.insertImage(select_image.getContentResolver(), bitmap, "Title", null);
    return Uri.parse(path);
}

}

第二项活动(MainActivity)

公共类MainActivity扩展了AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

2 个答案:

答案 0 :(得分:0)

在onActivityResult中,您获得了当前活动使用的结果。如果选择了图像,则可以在onActivityResult上获得结果。您可以在第二个活动中传递此imageUrl并在第二个活动中打开图像。如果您还有任何疑问,可以问我。

答案 1 :(得分:0)

总而言之,您希望与活动A交互,启动任务然后在活动B中收到结果,这是不可能的。但是您可以通过2个选项获得相同的行为:

  • 点击活动A按钮上的活动B.在活动B onCreate中,启动图像选择器并从那里获得结果。

  • 单击A按钮启动图像选择器,获取结果,然后使用startActivity Intent将结果传递给B.

首选选项,因为它使代码更清晰,活动B完成自己的工作,而活动A不需要了解它。此外,在从A到B序列化/反序列化param时,可以节省一些性能,使活动过渡更顺畅