Загрузите изображение и измените его размер, чтобы избежать ошибок 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)
уже будет иметь большое растровое изображение, которое заставит меня исчерпать память.