如何在android中的两个不同活动类之间发送位图

时间:2011-05-24 22:52:44

标签: android android-activity android-layout bitmap

在我们的应用程序中,我们需要在执行一些图像处理后将位图从一个活动类发送到另一个活动。我们在第一个活动中调用方法,然后我们想在第二个活动中显示输出图像。这两个活动类具有不同的布局xml文件。我们怎么能这样做?

3 个答案:

答案 0 :(得分:4)

一个Bitmap是可以分配的,所以你可以把它作为一个额外的发送,但是如果你的位图很大,这是一个坏主意 - 它可能会在没有太多RAM的旧手机上失败。

如果你有非常大的位图,你应该考虑在传输时将它们写入内部存储。这还将处理用户临时切换到其他应用程序(如来电)然后返回到您的应用程序的情况,该应用程序可能已在此时终止。

答案 1 :(得分:4)

正如EboMike所说,Bitmap是可以分配的,所以在你的第一个Activity中,你可以这样做:

Intent intent = new Intent(this,SecondActivity.class);
intent.putExtras("MYBITMAP",yourImage);
startActivity(intent);

并在第二个活动中添加以下代码:

Bitmap imageToDisplay = (Bitmap) this.getIntent().getExtras("MYBITMAP");
//and then you can display it in your imageView :)

答案 2 :(得分:0)

如果活动在同一个apk中,那么最好的方法就是使用静态变量。

您将处理位图对象(来自Canvas?)

class Globals {
    public static BitmapDrawable processedBitmapDrawable=null;
}

.... 在过程活动中:

Bitmap processedBitmap = canvas.getBitmap();
Globals.processedBitmapDrawable = new BitmapDrawable(processedBitmap); 

...

第二次活动:

if (Globals.processedBitmapDrawable!=null) {
   imageView.setDrawable(Globals.processedBitmapDrawable);
}

它似乎(并且)很简单,但是它是保存处理/加载位图多次的最佳方式。

您可以选择使用SoftReference<Bitmaprawable>这允许垃圾收集来清理引用(如果是nessecary)。虽然你可能需要重新加载/重新加载,如果你再次需要它。