7

SOには同様の質問がありますが、どれもうまくいきませんでした。

クリックした画像をActivity1に取得し、Activity2に表示したい。
クリックした画像の画像IDを次のように取得しています:

((ImageView) v).getId()

インテントを介して別のアクティビティに渡します。

2 番目のアクティビティでは、次のようにイメージ ID を使用します。

imageView.setImageResource(imgId);

両方のアクティビティで値 og image id を記録しましたが、同じです。

しかし、私は次の例外を取得しています:

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

ここでの問題は、ソース イメージではなくgetId()Id を返すImageViewことだと思います。 これらの画像はすべて にあります。
drawable

どんな助けでも感謝します。

4

5 に答える 5

33

この問題を解決するには、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)ビットマップをインテントに渡し、バンドルから次のアクティビティでビットマップを取得しますが、その時点でビットマップ/画像のサイズが大きい場合、次のアクティビティで画像が読み込まれないという問題があります。

于 2012-07-17T09:39:55.283 に答える
6

これはうまくいきません。この方法で試してみる必要があります。

ImageView の DrawingCache を true に設定し、背景をビットマップとして保存して 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);
于 2012-07-17T09:36:17.073 に答える