Зачем использовать библиотеку Android Picasso для загрузки изображений?
Зачем мне загружать изображения через библиотеку Picasso, а не просто использовать этот код:
private Bitmap DownloadImage(String URL)
{
Bitmap bitmap = null;
InputStream in = null;
try
{
in = OpenHttpGETConnection(URL);
bitmap = BitmapFactory.decodeStream(in); in.close();
}
catch (Exception e)
{
Log.d("DownloadImage", e.getLocalizedMessage());
}
return bitmap;
}
Другой вопрос:
Загружает ли Picasso изображение в пользовательском интерфейсе или фоновом потоке?
Ответы
Ответ 1
Только для записи для любого нового для Android или, возможно, перехода на Android из iOS..........
Пока что-то кардинально не изменится, вам абсолютно необходимо использовать Пикассо. Не шутка.
Честно говоря, это так просто. Преимущества невероятны.
Это легко использовать:
Picasso.
with(State.mainContext).
load(parseImageFile.getUrl()).
into(null);
Вы очень просто:
должен выполнять кэширование и потоковую обработку изображений с помощью изображений на Android.
Это так просто. Если вы не хотите писать с нуля, вы просто должны использовать Picasso.
Обратите внимание, что ParseImageFile существенно не работает - он абсолютно бесполезен в кэшировании и т.д. Есть замечательные альтернативы Пикассо (такие как Universal Image Loader, проверьте его), но ни одна из них не работает, как Пикассо, на данный момент 2014 года.
Примечание, если вы перейдете к супер-продвинутым материалам. лучше всего, чем Picasso, - сделать переезд на Volley. но это огромный скачок.
Обратите внимание, что прокрутка ListView на Android очень много, гораздо сложнее, чем прокрутка таблицы на iOS. Вы могли бы сказать, что Android + Picasso больше похож на ситуацию в iOS, где все работы уже сделаны для прокрутки больших табличных представлений с изображениями.
На сегодняшний день Picasso - просто - центральная часть любого приложения Android. Слава богу, это одна строка кода - никакой настройки, ничего.
Опять же, единственное, что лучше, чем "Пикассо", если вы переедете на "Воллей".
Кстати, отличная длинная статья о Volley v. Picasso, если вам это нужно...
http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/
Ответ 2
Picasso загружает изображение в другой поток, и он управляет вами:
- заполнитель, тем временем изображение все еще загружается
- изменение размера
- обрезка/центрирования/масштабирования
- кеширование (вам не нужно скачивать изображение каждый раз)
- он даже делает "изображение исчезает", которое сейчас популярно/нормально
Это очень просто, вот пример:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.resize(imgWidth, imgHeight)
.centerCrop()
.into(image);
Ответ 3
Я всегда использовал Picasso Library для изображений.
Это очень полезно для управления изображениями и не беспокоиться о проблеме памяти.
Когда я загружаю изображения с сервера или json, я использовал
Picasso.with(context).load("image url").fetch();
И я храню этот URL-адрес изображения в базе данных или где-то еще.
Теперь мы можем использовать это изображение в любом месте (в автономном режиме).
Picasso.with(context).load("image url").into(ImageView);
Ответ 4
Picasso.with(this).load("http://webneel.com/wallpaper/sites/default/files/images/04-2013/island-beach-scenery-wallpaper.jpg").placeholder(R.mipmap.ic_launcher).fit().into(imageView,
new Callback() {@
Override
public void onSuccess() {}@
Override
public void onError() {}
});
Вы должны загрузить изображения через библиотеку Picasso по следующим причинам:
- Вы можете поместить местозаполнитель в случае, если для загрузки изображения требуется некоторое время.
-
fit()
- иногда некоторые изображения не загружаются в представлении изображения из-за размера. Этот метод поможет вам загрузить большие изображения.
-
onSuccess()
- вы можете выполнить некоторые действия, когда изображение загрузится успешно.
-
onError()
- вы можете выполнить некоторые действия при возникновении проблемы с загрузкой изображения.
Ответ 5
Вам следует использовать библиотеку загрузчика изображений, такую как Picasso, Volley или Universal Image Loader, потому что они выполняют следующие действия, которые ваш код не делает:
- Эффективная многопоточная сеть (конечно, по фоновым потокам)
- Объединение нескольких идентичных запросов в один сетевой вызов
- Отмена ожидающих запросов, особенно при переработке элементов ListView
- Кэш-память и диск с различными политиками истечения срока действия
- Снижение масштаба изображения до размера целевого представления для повышения производительности и сокращения использования памяти.
- Обновление пакетных пользовательских интерфейсов для улучшения пользовательского интерфейса (по крайней мере для Volley и Picasso).
Кстати, вы никогда не должны выполнять сетевые запросы в потоке пользовательского интерфейса, а поскольку HoneyComb, Android не позволяет вам это делать.
Ответ 6
Я знаю, что Picasso - потрясающая библиотека для управления изображениями в ListView и GridView, но среди всех опций, включая Picasso, я использую GLIDE...
Он действительно управляет загрузкой и кешированием Perfectly... (я не мог заставить Picasso использовать кешированные изображения после завершения загрузки, но Glide сделал это просто как кусок пирога).
Вот страница Github GLIDE:
https://github.com/bumptech/glide
С уважением....
Ответ 7
Если вы будете использовать основной метод загрузки изображения из сети, тогда потребуется больше кода. Но если мы будем использовать стороннюю библиотеку, такую как picasso, тогда мы достигнем нашей цели в нескольких строках кода.
И библиотека Пикассо - лучшая и самая простая, что я нашел до сих пор.
Нам нужно только написать следующее, чтобы загрузить изображение из Интернета с помощью picasso.
Picasso.with(this)
.load("YOUR IMAGE URL HERE")
.placeholder(Your Drawable Resource) //this is optional the image to display while the url image is downloading
.error(Your Drawable Resource) //this is also optional if some error has occurred in downloading the image this image would be displayed
.into(imageView);
Но если мы не будем использовать библиотеку picasso или любую другую библиотеку, нам может понадобиться сделать это с помощью AsyncTask, которая потребует больше строк кода.
Источник: Учебник по Picasso для Android
Ответ 8
Добавьте в свою build.gradle(Module:app)
следующую зависимость:
compile 'com.github.bumptech.glide:glide:3.6.1'