如何使用Xamarin Android中的Intents将图像从一个活动传递到另一个活动?

时间:2015-07-20 22:08:44

标签: android xamarin xamarin.android

我是网络开发人员,但最近开始使用Xamarin探索Android开发世界,但我很难找到完成此任务的方法。

我的图片位于drawables-hdpi。

在我的主要活动中,我使用本教程http://developer.xamarin.com/recipes/android/resources/general/load_large_bitmaps_efficiently/

在imageview上设置了标题图片

现在,我创建了另一个活动,当用户点击我的标题图片时,第二个活动开始生效,并允许用户平移和缩放图像。

我需要第二个活动来动态接收第一个活动的图像。

这是我尝试过但却没有成功的事情。我使用相同的"有效加载图像"第二项活动中的代码,但我认为无论如何都不重要。

  // set image
  BitmapFactory.Options options = await GetBitmapOptionsOfImage();

  Bitmap bitmapToDisplay = await LoadScaledDownBitmapForDisplayAsync (Resources, options, 400, 400);
  headerImage.SetImageBitmap(bitmapToDisplay);

  headerImage.Click += (object sender, EventArgs e) => {

    var intent = new Intent(this, typeof(ImageScaleActivity));

    headerImage.BuildDrawingCache();
    Bitmap image = headerImage.GetDrawingCache(true);

    Bundle extras = new Bundle();
    extras.PutParcelable("imagebitmap", image);
    intent.PutExtras(extras);

    // TODO: dynamically get image name and send to next activity

    StartActivity(intent);

  };

该代码不起作用,我没有收到任何错误,但是当我点击我的标题图片时,第二个活动中没有显示任何内容,因此图片显然没有被发送。

这是我第二次活动中的代码。

  // set image
  BitmapFactory.Options options = await GetBitmapOptionsOfImage();

  Bitmap bitmapToDisplay = await LoadScaledDownBitmapForDisplayAsync (Resources, options, 400, 400);
  //expandedImage.SetImageBitmap(bitmapToDisplay);

  Bundle extras = Intent.Extras;
  Bitmap bmp = (Bitmap) extras.GetParcelable("imagebitmap");

  expandedImage.SetImageBitmap(bmp);

我只是觉得我没有以正确的方式解决这个问题,我不明白为什么这样的事情看起来很难做到!

2 个答案:

答案 0 :(得分:0)

如果您的drawable中有图像,则无需将其发送到第二个活动。在这样的第二个活动中设置它是可绘制的。

ImageView imgView=(ImageView) findViewById(R.id.imgView);
Drawable  drawable  = getResources().getDrawable(R.drawable.img);
imgView.setImageDrawable(drawable);

答案 1 :(得分:-1)

You need to put the image in the Intent referring to the Activity 2.
You can use byte array to send the Image.
Byte[] pic; // Contains the Picture. 

In you Main Activity make an intent of Activity2.
  Intent myIntent = new Intent(this, typeof(Activity2));
  myIntent.PutExtra("Picture_from_Activity1",pic);
  this.StartActivity(myIntent);

Now in Activity2 Receive and display the picture.
byte[] recPic = Intent.GetByteArrayExtra("Picture_from_Activity1");

Now convert this Picture to bitmap and display it.
Bitmap bitmap = BitmapFactory.DecodeByteArray(recPic,0,recPic.Length);
ImageView iv;
iv.SetImageBitmap(bitmap);

:)