2012-07-17 163 views
0

上有如此相似的問題,但沒有爲我工作。從一個活動傳遞圖像的其他活動

我想在活動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

回答

15

有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

5

這是行不通的。你必須這樣試試。

設置您的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

0

總之要做到這一點的最佳方式。 這是發送者的.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); 

無需壓縮。 就是這樣

相關問題