を含むアクティビティがあり、ImageView
これを別のアクティビティで送信したいのですがImageView
、どうすればよいですか?
4 に答える
実際には ImageView 自体を渡すことはできません。ただし、その値を渡して、それを他のアクティビティの新しい ImageView に再ロードすることはできます。
インテント内のアクティビティ間でデータを渡すことができます。
これは、次のような例になります。
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、またはファイル システム内の画像パスを送信します。実際、画像全体をbase64、バイナリ、または思いついたものとして送信しようとしないでください。
アクティビティ間でイメージビューを渡すことはできません。
あるアクティビティから別のアクティビティに画像を渡す必要があるとします。
以下のようにバイト配列に変換することでビットマップを渡すことができます
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(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);
更新 : 2019 年 5 月 9 日 注: イメージをディスク上のどこかに保存してから、イメージへのパスのみを次のアクティビティに渡すことをお勧めします。画像が巨大な場合、上記は機能しない可能性があります。
imageview をサブクラス化してシリアライズ可能なインターフェイスを実装し、この方法で渡すか、imageview のリソース id(int) を別のアクティビティに渡してから、そのアクティビティの imageview をこのリソース id でロードするか、imageview を静的にしてから、他のアクティビティでFirstClass.imageView 経由で呼び出すだけです
ビットマップを bytearray に変換して渡すと、問題なく動作します