2013-07-04 175 views

回答

0

您無法在活動之間傳遞圖像。

假設你需要從一個活動傳遞圖像到另一個。

可以通過將其轉換爲如下

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

通行證字節數組的ByteArray到意圖通過位圖: -

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

在NextActivity從捆綁獲取字節數組,轉換成位圖圖像: -

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); 
+0

我有一個java.lang.NullPointerException – user2550055

+0

@ user2550055開始一個新的線程與相關的細節。上述工作正常。在新問題中發佈代碼和堆棧跟蹤 – Raghunandan

+0

@ user2550055異常可能是因爲代碼中的某些對象可能爲空。 – Raghunandan

0

您可以繼承imageview並實現可序列化的接口並以此方式傳遞它,或者您可以將imageview的資源id(int)傳遞給另一個活動,然後使用此資源id加載該活動的imageview,或者使imageview靜態,然後其他acitvity您只需通過FirstClass.imageView

2

稱它爲你不能真正通過ImageView的本身。但是,您可以傳遞它的值並將其重新加載到您自己的新ImageView中的其他Activity中。

您可以在意圖傳遞Activitys之間的數據。

這又按照實施例這樣;

Intent intent = new Intent(this, MyNewActivity.class); 
intent.putExtra("EXTRA_IMAGEVIEW_URL", myImageViewData); 
startActivity(intent) 

然後在啓動(MyNewActivity)中,您可以再次獲取該數據;

String imageview_url = getIntent().getStringExtra("EXTRA_IMAGEVIEW_URL"); 

使用任何適合您的數據類型的方法。

編輯注: 該解決方案是假設你發送一個簡單的指針的形象,而不是圖像本身。您可以從您加載它的URL或URI,您的文件系統中的可繪製ID或圖像路徑發送URL。事實上,不要試圖將整個圖像本身作爲base64,binary或任何你想出來的東西。

+0

謝謝Stefan,我會盡力做到這一點 – user2550055

+0

如果圖像太大,就有OOM的可能性。更好地壓縮它在接收端進行解碼。 – Raghunandan

+0

此解決方案假設您發送一個簡單的指針指向圖像,而不是圖像本身。您可以從您加載它的URL或URI,您的文件系統中的可繪製ID或圖像路徑發送URL。事實上,不要試圖將整個圖像本身作爲base64,binary或任何你想出來的東西。 –

0

通過將位圖轉換爲bytearray來傳遞位圖效果很好我

相關問題