Загрузите изображение и измените его размер, чтобы избежать ошибок OOM, Picasso fit () искажает изображение

Я пытаюсь показать изображения в полноэкранном режиме и использую следующий код:

// Target to write the image to local storage.
Target target = new Target() {
   // Target implementation.
}

// (1) Download and save the image locally.
Picasso.with(context)
       .load(url)
       .into(target);

// (2) Use the cached version of the image and load the ImageView.
Picasso.with(context)
       .load(url)
       .into(imgDisplay);

Этот код хорошо работает на новых телефонах, но на телефонах с 32 МБ виртуальных машин у меня возникают проблемы с памятью. Поэтому я попытался изменить (2) на:

    Picasso.with(context)
       .load(url)
       .fit()
       .into(imgDisplay);

Это привело к искаженным изображениям. Поскольку я не знаю размеры изображения до его загрузки, я не могу установить размеры ImageView, и, следовательно, размер изображения изменяется без учета соотношения сторон в моем ImageView:

    <ImageView
    android:id="@+id/imgDisplay"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:scaleType="fitCenter"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

Каков наилучший способ справиться с этой ситуацией? Мои исходные изображения имеют максимальную ширину 768 и высоту 1024, и я хочу уменьшить частоту дискретизации, когда экраны намного меньше этого. Если я попытаюсь использоватьresize()мой код усложняется, так как я должен ждать (1), чтобы закончить загрузку, а затем добавитьresize() в (2).

Я предполагаю, что преобразования не помогают в этом случае, так какpublic Bitmap transform(Bitmap source) уже будет иметь большое растровое изображение, которое заставит меня исчерпать память.

Ответы на вопрос(1)

Ваш ответ на вопрос