Как передать изображение с одного Активити на другое?

У меня есть 2 Активити. В обеих Активити есть ава пользователя куда ставится изображение. Так вот. Я хочу передать установленную Аву пользователем, с одной Активити на другую. Как это сделать? Скажите пожалуйста. Это можно сделать с помощью Intent?


Ответы (2 шт):

Автор решения: Andrew

Есть несколько вариантов. Вариант 1:

imageView.buildDrawingCache();
Bitmap bitmap = imageView.getDrawingCache();

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("BitmapImage", bitmap);

и в принимающей активности:

Bitmap bitmap = (Bitmap) intent.getParcelableExtra("BitmapImage");

Либо второй вариант - передавать массив байтов:

Intent i = new Intent(this, NextActivity.class);
Bitmap b; // ваша картинка
ByteArrayOutputStream bs = new ByteArrayOutputStream();
b.compress(Bitmap.CompressFormat.PNG, 50, bs);
i.putExtra("byteArray", bs.toByteArray());
startActivity(i);

и дальше извлекаем в другой активности:

if(getIntent().hasExtra("byteArray")) {
    ImageView previewThumbnail = new ImageView(this);
    Bitmap b = BitmapFactory.decodeByteArray(
        getIntent().getByteArrayExtra("byteArray"),0,getIntent().getByteArrayExtra("byteArray").length);        
    previewThumbnail.setImageBitmap(b);
}
→ Ссылка
Автор решения: Sergei Buvaka

Я бы не рекомендовал вам передавать изображения через bundle. Bundle создан для передачи простых данных. Да никто не запрещает вам положить и более сложный объект в bundle, но надо помнить, что размер bundl-a ограничен (по-моему 1 МБ, но могу и ошибаться). А значит если ваше изображение будет больше 1 МБ ваше приложение упадет.

Для таких вещей рекомендуется кешировать их. Это может быть база данных, какая-то сущность которая живет отдельно от ваших View (Activity, Fragment) в течении всего приложения, можно сохранять на диск. А при переходе не новую активити передавать ссылку или id на изображение в bundl-е и открывать ее снова.

→ Ссылка