从一个活动传递图像的其他活动

问题描述:

上有如此相似的问题,但没有为我工作。从一个活动传递图像的其他活动

我想在活动1获取点击的图像和活性2显示。
我这样取图片ID点击图像:

((ImageView) v).getId() 

并使其通过意图另一个活动。

在第二届活动中,我使用的图片ID如下:

imageView.setImageResource(imgId); 

我会记录在活动的价值OG图片ID,它是一样的。

但我发现了以下异常:

android.content.res.Resources$NotFoundException: Resource is not a Drawable 
(color or path): TypedValue{t=0x12/d=0x0 a=2 r=0x7f050000} 

我想这里的问题是getId()正在恢复的ImageView Id和的不是它的源图像
所有这些图像存在于drawable

任何帮助表示赞赏。

+0

究竟似乎这个问题:“我想这里的问题是的getId()将返回的ImageView的ID和不是它的源图像。” 你如何回顾这个形象?为什么你不能获得图像?不是可绘制的?这些图像来自互联网。 如果图像是从互联网上,你可以尝试缓存内存或文件中的图像,并通过将缓存 – Litus 2012-07-17 09:35:04

+0

所以retrive它的下一个活动我怎么**资源ID ** ??? – GAMA 2012-07-17 09:36:21

+0

@Andro Selva解决方案看起来不错:) – Litus 2012-07-17 09:39:02

有3个解决方案来解决这个问题。

1)第一转换图像转换成字节数组,然后通入意向和下一个活动从捆绑得到字节数组,转换为图像(位图),并设置成ImageView的。

转换位图字节数组: -

Bitmap bmp = BitmapFactory.decodeResource(getResources(), R.drawable.ic_launcher); 
ByteArrayOutputStream stream = new ByteArrayOutputStream(); 
bmp.compress(Bitmap.CompressFormat.PNG, 100, stream); 
byte[] byteArray = stream.toByteArray(); 

通行证字节数组到意图: - 从捆绑

Intent intent = new Intent(this, NextActivity.class); 
intent.putExtra("picture", byteArray); 
startActivity(intent); 

获取字节数组,转换成位图图像: -

Bundle extras = getIntent().getExtras(); 
byte[] byteArray = extras.getByteArray("picture"); 

Bitmap bmp = BitmapFactory.decodeByteArray(byteArray, 0, byteArray.length); 
ImageView image = (ImageView) findViewById(R.id.imageView1); 

image.setImageBitmap(bmp); 

2)首先将图像保存到SDCard中,然后在下一个活动中将此图像设置为ImageView。

3)合格的位图到意向并得到了来自包下一个活动的位图,但问题是,如果你的位图/图像大小是当时的图像不会在接下来的活动负载大。

+0

@GAMA如果u直接传位图到意图,如果图像是大那时位图不会显示在下一个活动中,所以传递字节数组是安全的。 – 2012-07-17 10:03:00

+0

@GAMA对不起,现在检查我编辑的答案。 – 2012-07-17 10:14:13

+0

等待,此行不会为我工作作为乌拉圭回合给图像的硬编码的ID ...'BMP位图= BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher);' – GAMA 2012-07-17 10:17:33

这是行不通的。你必须这样试试。

设置您的ImageView的DrawingCache是​​真实的,然后保存为背景位图,并通过putExtra通过。

image.setDrawingCacheEnabled(true); 
Bitmap b=image.getDrawingCache(); 
Intent i = new Intent(this, nextActivity.class); 

i.putExtra("Bitmap", b); 
startActivity(i); 

而在你的下一个活动,

Bitmap bitmap = (Bitmap) intent.getParcelableExtra("Bitmap"); 
imageView.setImageBitmap(bitmap); 
+0

我收到'E/JavaBinder(61):!!!失败BINDER TRANSACTION !!!'和'ANR在com.galley.sample(com.galley.sample/.ViewDetails)... 原因:keyDispatchingTimedOut' – GAMA 2012-07-17 09:49:46

总之要做到这一点的最佳方式。 这是发送者的.class文件

Bitmap bitmap = BitmapFactory.decodeResource(getResources(),R.drawable.ic_launcher; 
Intent intent = new Intent(); 
Intent.setClass(<Sender_Activity>.this, <Receiver_Activity.class); 
Intent.putExtra("Bitmap", bitmap); 
startActivity(intent); 

的代码,这是接收器的类文件的代码。

Bitmap bitmap = (Bitmap)this.getIntent().getParcelableExtra("Bitmap"); 
ImageView viewBitmap = (ImageView)findViewById(R.id.bitmapview); 
viewBitmap.setImageBitmap(bitmap); 

无需压缩。 就是这样