Как отправить растровое изображение между двумя различными классами активности в Android

1

В нашем приложении нам нужно отправить растровое изображение из одного класса активности в другое действие после выполнения некоторой обработки изображений. Мы называем методы в первом действии, а затем хотим показать выходное изображение во втором действии. У двух классов активности есть разные макеты xml файлов. Как мы можем это сделать?

Теги:
android-activity
android-layout
bitmap

3 ответа

4
Лучший ответ

Растровое изображение можно использовать как EboMike, поэтому в первом упражнении вы можете сделать это:

Intent intent = new Intent(this,SecondActivity.class);
intent.putExtras("MYBITMAP",yourImage);
startActivity(intent);

и в вашем SecondActivity добавьте этот код:

Bitmap imageToDisplay = (Bitmap) this.getIntent().getExtras("MYBITMAP");
//and then you can display it in your imageView :)
  • 0
    но это разные классы активности, поэтому переменную "MYBİTMAP" можно увидеть во втором классе активности?
  • 0
    @barzos: да, это можно увидеть во втором упражнении, потому что вы отправляете его в своем намерении с помощью putExtras (), «MYBITMAP», это всего лишь тег для различия между объектами, которые вы отправляете из действия в другое,
Показать ещё 2 комментария
4

Растровое изображение является простым, поэтому вы можете отправить его в качестве дополнительного, НО это плохая идея, если ваш растровый файл большой - он может не работать на старых телефонах, у которых не так много оперативной памяти.

Если у вас действительно большие растровые изображения, вы должны подумать о том, чтобы записать их во внутреннее хранилище по мере их переноса. Это также относится к случаю, когда пользователь временно переключается на другое приложение (например, входящий телефонный звонок), а затем возвращается к вашему приложению, которое, возможно, было завершено в этот момент.

0

Если действия находятся в одном и том же apk, лучший способ - просто использовать статическую переменную.

Вы будете обрабатывать растровый объект (из холста?)

class Globals {
    public static BitmapDrawable processedBitmapDrawable=null;
}

.... в процессе:

Bitmap processedBitmap = canvas.getBitmap();
Globals.processedBitmapDrawable = new BitmapDrawable(processedBitmap); 

...

во второй степени:

if (Globals.processedBitmapDrawable!=null) {
   imageView.setDrawable(Globals.processedBitmapDrawable);
}

кажется (и есть) простым, но наилучшим способом, поскольку он сохраняет обработку/загрузку растрового изображения несколько раз.

Вы также можете использовать SoftReference<Bitmaprawable>, что позволяет сборку мусора очищать ссылку, если она необходима. хотя вам может потребоваться перезагрузка/повторная регистрация, если вам это нужно еще раз.

  • 1
    Это действительно плохой совет, во-первых, использовать статику, которая создает зависимости в коде, чего вам действительно следует избегать любой ценой. А во-вторых, потому что вы, скорее всего, создадите утечку памяти. Drawables, как правило, связаны с деятельностью. поэтому деятельность никогда не будет выпущена из памяти.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню