如何在android中将图像从一个活动发送到另一个活动

Posted

技术标签:

【中文标题】如何在android中将图像从一个活动发送到另一个活动【英文标题】:How to send image from one activity to another in android 【发布时间】:2016-11-04 02:51:23 【问题描述】:

主要活动

holder.cardView.setOnClickListener(new View.OnClickListener() 
    @Override
    public void onClick(View view) 
       String title = ((TextView) view.findViewById(R.id.recipe_title)).getText().toString();
       String time = ((TextView) view.findViewById(R.id.time)).getText().toString();
       String servings = ((TextView) view.findViewById(R.id.servings)).getText().toString();
       String calories = ((TextView) view.findViewById(R.id.calories)).getText().toString();
       ImageView thumbnail = (ImageView) view.findViewById(R.id.recipe_img);
       Intent intent = new Intent(context, ActivityDetail.class);
       intent.putExtra("RecipeTitle", title);
       intent.putExtra("RecipeTotalTime", time);
       intent.putExtra("RecipeServings", servings);
       intent.putExtra("RecipeCalories", calories);
       context.startActivity(intent);
    
);

详细活动

TextView time = (TextView)findViewById(R.id.time_detail);
TextView servings = (TextView)findViewById(R.id.servings_detail);
TextView calories = (TextView)findViewById(R.id.calories_detail);
ImageView thumbnail = (ImageView)findViewById(R.id.image_paralax);
time.setText(getIntent().getExtras().getString("RecipeTotalTime"));
servings.setText(getIntent().getExtras().getString("RecipeServings"));
calories.setText(getIntent().getExtras().getString("RecipeCalories"));

如何将缩略图从第一个 Activity 发送到第二个 Activity。在第二个 `Activity 中,缩略图将显示在 ImageView 上。

【问题讨论】:

how to pass images through intent?的可能重复 【参考方案1】:

您不应尝试通过 Intent 发送图像。相反,最好发送图像的 Uri。在第二个活动中,从 Uri 加载图像。

【讨论】:

这取决于您加载图像的方式(即路径、文件),如果您使用的是文件,您可以获得这样的 Uri。 Uri retrivedUri = Uri.fromFile(imageFile);然后将其作为 Parcelable 放入意图中。 myIntent.putParcelable(”yourKey”, retrivedUri);【参考方案2】:

我不建议您将位图传递给其他活动,而是应该传递字符串 url,并且在接收活动中您可以从网络或文件加载图像。

如果您真的只想使用位图传递图像,那么您必须先将其转换为字节数组,然后再将其添加到意图、发送出去并解码。

Bitmap bmp = ((BitmapDrawable)thumbnail.getDrawable()).getBitmap();
ByteArrayOutputStream stream = new ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream);
byte[] byteArray = stream.toByteArray();

Intent in1 = new Intent(this, Activity2.class);
in1.putExtra("image",byteArray);

然后在您的接收活动中,您需要添加以下代码来接收字节数组:

byte[] byteArray = getIntent().getByteArrayExtra("image");
Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length);

现在你有一个位图,你可以添加setImageDrawable(new BitmapDrawable(mContext.getResources(), bmp));

这就是你需要做的。

【讨论】:

【参考方案3】:

将图像发送到意图中并不是一件好事,您应该尝试发送图像的uri。

但如果你真的想这样做,那么你可以从图像视图中获取可绘制的 Bitmap:

Bitmap bitmap = ((BitmapDrawable) thumbnail.getDrawable()).getBitmap();

由于位图是 Parcelable,您可以将其作为 Extra 直接发送:

intent.putExtra("RecipeThumbnail", bitmap); 

【讨论】:

【参考方案4】:

是的,有可能……但不推荐

1)首先你必须从该位图制作位图和字节数组

Bitmap bitmap = ((BitmapDrawable)thumbnail.getDrawable()).getBitmap();
ByteArrayOutputStream stream=new ByteArrayOutputStream();
bitmap.compress(Bitmap.CompressFormat.PNG, 90, stream);
byte[] image=stream.toByteArray();

2) 然后你可以使用意图传递它

intent.putExtra("Thumbnail Image", image);

3) 在接收活动中,

byte[] = getIntent.getExtra("Thumbnail Image");
Bitmap bmp = BitmapFactory.decodeByteArray(byte, 0, byteArray.length);
imageView.setImageBitmap(bmp);

【讨论】:

【参考方案5】:

像大师一样做的更快:)

传递图像的 id,你的资源中有它,那么如果活动 b 可以通过知道 id 来加载它,为什么 seralisin 这么多信息...

Intent intent = new Intent(context, ActivityDetail.class);
...
intent.putExtra("imageId", R.id.recipe_img);

在其他活动上就足够了:

ImageView thumbnail = (ImageView) view.findViewById(yourREceivedImageId);

【讨论】:

以上是关于如何在android中将图像从一个活动发送到另一个活动的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Android Java 中将 1000 多个项目列表从一个 Activity 发送到另一个?

无法在Android中将变量值从一个活动发送到另一个活动

如何在android studio中将堆栈从一个活动传递到另一个活动

在Android中将一个对象从一个活动传递到另一个活动

如何将图像从一项活动发送到另一项活动?

Android:如何将界面从一个活动发送到另一个活动