Android - 如何将ImageView从一个活动转移到另一个活动?

时间:2013-08-04 09:34:06

标签: java android android-intent

我有一个有一个包含图像预览的ImaveView的Activity1。 按下按钮后,我从Activity1进入Activity2。在Activity2中,我没有图像预览,而是一个选项按钮"保存Activit1的图像?"是或否。

目前我的做法是错误的,就像将图像保存在磁盘中然后从磁盘读回来一样。但有没有保存图像的方法我可以将一个imageView从Activity1传输到Activity2?

以下是我在Activity1中获取图片的方法> ImageView,然后需要移动到Activity2。有什么想法吗?

public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      setContentView(R.layout.activity_main);
      this.imageView = (ImageView)this.findViewById(R.id.picture);            
      Button photoButton = (Button) this.findViewById(R.id.capture_btn);      
      Button btnShareToEmail = (Button) this.findViewById(R.id.btnshare);
      btnShareToEmail.setOnClickListener(this);

      //photoButton.setOnClickListener(new View.OnClickListener() {
          //@Override
        //  public void onClick(View v) {
          //    Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
            //  startActivityForResult(cameraIntent, CAMERA_REQUEST); 
         // }
      //});

      // without frozen
      new Handler().postDelayed(new Runnable() { public void run() { 
          Intent cameraIntent = new Intent(android.provider.MediaStore.ACTION_IMAGE_CAPTURE); 
          startActivityForResult(cameraIntent, CAMERA_REQUEST);
      }}, 100);      
  }



  protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
    if (requestCode == CAMERA_REQUEST && resultCode == RESULT_OK) {  
        Bitmap photo = (Bitmap) data.getExtras().get("data"); 
        imageView.setImageBitmap(photo);



    }  
  }

修改

// Set - Activity1

Intent winShare = new Intent(getBaseContext(), Activity2.class);
winShare.putExtra("Title", "r2.jpg");
winShare.putExtra("image1", photo);         
//int image_link = getIntent().getIntExtra("image1");
startActivityForResult(winShare,0); 

// GET - Activity2

    Bitmap bitmap = (Bitmap) getIntent().getParcelableExtra("image1"); // BITMAP_SHARED_KEY = "bitmap_shared_key"

    imageView.setImageBitmap(bitmap);
    // save it
    imageView.buildDrawingCache();
    Bitmap bm=imageView.getDrawingCache();
    OutputStream fOut = null;
    Uri outputFileUri;
    try {
      File root = new File(Environment.getExternalStorageDirectory() + File.separator + "MYAPPPPPPPPPS" + File.separator);
      root.mkdirs();
      File sdImageMainDirectory = new File(root, "myPicName.jpg");
      outputFileUri = Uri.fromFile(sdImageMainDirectory);
      fOut = new FileOutputStream(sdImageMainDirectory);
      bm.compress(Bitmap.CompressFormat.PNG, 100, fOut);
      fOut.flush();
      fOut.close();      
   } catch (Exception e) {
     Toast.makeText(this, "Error occured. Please try again later.",Toast.LENGTH_SHORT).show();
   }

3 个答案:

答案 0 :(得分:1)

首先,您需要了解当您使用相机活动获取图像时,您将获得所拍摄图像的缩略图版本。为了获得一个完整大小的图像,它必须保存,你可以看看我在这个问题上写的这篇博文,以获取更多信息:

Use Camera Activity for Thumbnail and Full Size Image

现在针对您的问题,我认为最好的选择是将此图像保存到文件(在指南中描述),并使用图像的字符串路径将额外的内容传递给以下活动。

答案 1 :(得分:1)

有很多方法可以解决这个问题。以下是两种简单的方法:

首先,您可以阅读有关SharedPreferences

的更多信息

第二,您可以将此活动的以下位图放到另一个活动中:

putExtra:

intent.putExtra(BITMAP_SHARED_KEY, yourBitmap);
startActivity(intent);
你共享的

getBitmap

Bitmap bitmap = (Bitmap) intent.getParcelableExtra(BITMAP_SHARED_KEY); // BITMAP_SHARED_KEY = "bitmap_shared_key"

答案 2 :(得分:1)

简单方法使用此

  1. 第一项活动

    Bitmap bitmap = BitmapFactory.decodeResource(getResources(), 
    R.drawable.men_icon);
    Bundle extras = new Bundle();
    Intent intent=new Intent(FirstActivity.class,SecondActivity.class);
    extras.putParcelable("Bitmap", bitmap);
    intent.putExtras(extras);
    startActivity(intent);
    
  2. 第二项活动

     ImageView iv_photo=(ImageView)findViewById(R.id.iv_photo);
     Bundle extras = getIntent().getExtras();
     Bitmap bmp = (Bitmap) extras.getParcelable("Bitmap");
     iv_photo.setImageBitmap(bmp);