从一个活动传递图像的其他活动
上有如此相似的问题,但没有为我工作。从一个活动传递图像的其他活动
我想在活动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
。
任何帮助表示赞赏。
有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)合格的位图到意向并得到了来自包下一个活动的位图,但问题是,如果你的位图/图像大小是当时的图像不会在接下来的活动负载大。
@GAMA如果u直接传位图到意图,如果图像是大那时位图不会显示在下一个活动中,所以传递字节数组是安全的。 – 2012-07-17 10:03:00
@GAMA对不起,现在检查我编辑的答案。 – 2012-07-17 10:14:13
等待,此行不会为我工作作为乌拉圭回合给图像的硬编码的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);
我收到'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);
无需压缩。 就是这样
究竟似乎这个问题:“我想这里的问题是的getId()将返回的ImageView的ID和不是它的源图像。” 你如何回顾这个形象?为什么你不能获得图像?不是可绘制的?这些图像来自互联网。 如果图像是从互联网上,你可以尝试缓存内存或文件中的图像,并通过将缓存 – Litus 2012-07-17 09:35:04
所以retrive它的下一个活动我怎么**资源ID ** ??? – GAMA 2012-07-17 09:36:21
@Andro Selva解决方案看起来不错:) – Litus 2012-07-17 09:39:02