2012-07-17 4 views
0

비슷한 질문이 있지만 나에게는 도움이되지 않습니다.하나의 활동에서 다른 활동으로 이미지 전달하기

나는 activity1에에서 클릭 된 이미지를 가져오고 activity2에에 표시하고자합니다.
I는 다음과 같이 클릭 한 이미지의 이미지 ID를 가져 오는 해요 :

((ImageView) v).getId() 

을 다른 활동으로 의도를 통과.

2 차 활동, 나는 다음과 같은 이미지 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의 아이디를 반환하고 있지 그것의 소스 이미지 같아요.
모든 이미지는 drawable에 있습니다.

도움을 주시면 감사하겠습니다.

+0

정확하게 그 문제가 보인다 : "나는 여기에있는 문제가 getId()가 ImageView의 ID를 반환하고 소스 이미지가 아닙니다."라고 생각합니다. 어떻게이 이미지를 검색합니까? 왜 이미지를 얻을 수 없습니까? 드로어 블에 없습니까? 이 이미지는 인터넷에서 가져온 것입니다. 이미지가 인터넷에있는 경우 이미지를 메모리 또는 파일에 캐시하고 다음 활동에서 캐시 된 – Litus

+0

을 가져 와서 ** 리소스 ID **를 얻을 수 있습니다. – GAMA

+0

@Andro Selva 솔루션이 좋은 것 같습니다 :) – Litus

답변

15

이 문제를 해결하기 위해 3 개 솔루션이 있습니다.

1) 바이트 배열하고 의도를 통과하고 다음 활성 먼저 변환 이미지 번들 바이트 배열을 얻을 이미지 (비트 맵)로 변환하고 이미지 뷰에 설정.

변환 바이트 배열에 비트 맵 : - 의도로

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가 직접 비트 맵을 의도로 전달하고 이미지가 큰 경우 그 때 비트 맵은 다음 활동에서 표시되지 않으므로 바이트 배열 전달은 안전합니다. –

+0

@GAMA 죄송합니다. 편집 된 답변을 확인하십시오. –

+0

기다려라,이 라인은 이미지의 하드 코딩 된 ID를 제공하는 것처럼 나를 위해 작동하지 않을 것이다 ... 'Bitmap bmp = BitmapFactory.decodeResource (getResources(), R.drawable.ic_launcher);' – GAMA

5

이 작동하지 않습니다. 이런 식으로 시도해야합니다.

은 사실 다음 비트 맵으로 배경을 저장하고 putExtra을 통해 전달하기 위해 이미지 뷰의 DrawingCache를 설정합니다.
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) : !!! FAILED BINDER TRANSACTION !!!, AND' com.galley.sample (com.galley.sample/.ViewDetails) ... 이유 : keyDispatchingTimedOut' – GAMA

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

압축 할 필요가 없습니다. 그게 다

관련 문제