将imageView传递给下一个Activity- Android

时间:2014-03-03 23:48:07

标签: android android-intent

我知道这里有人问过,但我的问题有点不同。我在SO上阅读了与此主题相关的其他答案,但它们并没有解决我的问题。

所以在我的应用程序中,我有2个活动。在第一个中,有20个图像视图(我计划添加更多),在第二个活动中,有一个自定义视图,实际上是一个缩放图像类。基本上,当用户在第一个活动中点击任何图像视图时,他将被带到第二个活动,在那里他可以缩放该特定图像。

我想在编码部分做的是获取在点击的图像视图上显示的图像并将其传递给下一个活动。为了达到这个目的,我使用了下面给出的代码,但它没有用。可能有什么不对?

Activity_one

Intent startzoomactivity = new Intent(Activity_one.this, Activity_two.class);
Bitmap img_res = img.getDrawingCache();
Bundle extras = new Bundle();
extras.putParcelable("imagebitmap", img_res);
startzoomactivity.putExtras(extras);
startActivity(startzoomactivity);

Activity_two

Intent startzoomactivity = getIntent();
Bundle extras = getIntent().getExtras();
Bitmap bmp = (Bitmap) extras.getParcelable("imagebitmap");

TouchImageView img = new TouchImageView(this); // TouchImageView is the class that enables zoom feature on the imageview.
img.setImageResource(i);
img.setMaxZoom(5f);

3 个答案:

答案 0 :(得分:2)

您无法将ImageView传递给其他活动。视图与它们所属的活动直接相关,无法传递。

您在代码中尝试实现的是将ImageView的绘图缓存副本作为位图获取,即使您使其工作(它缺少view.setDrawingCache),它也会给您带来非常糟糕的影响结果,特别是在放大后。

您需要做的是找到原始图片(如果它来自互联网的URL,或磁盘缓存中的位置,如果它来自您的资源文件夹,则绘制该图像的int resId,以及将此值(字符串或整数)传递给下一个活动。然后让下一个活动创建自己的ZoomableImageView并将原始资源(链接,文件,资源)设置为它。

答案 1 :(得分:1)

我明白你想要实现的目标,但你的方式是完全错误的。而不是传递ImageView位图传递ImageView URLPath(如果是可绘制的,然后是ResId),此图像来自并传递URL或{{ 1}}或Path到下一个活动,并将此图片作为ResId加载到Bitmap

答案 2 :(得分:0)

您可以将imageview中的图像作为位图,然后使用http://developer.android.com/reference/android/graphics/Bitmap.html#compress(android.graphics.Bitmap.CompressFormat,int,java.io.OutputStream)api对其进行压缩。然后将outputstream对象转换为字节数组,因为这是可以分配的,你可以把这个对象放在intent中并传递给你的第二个活动