Зачем использовать библиотеку Android 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;
}
еще вопрос:
Пикассо загружает изображение в пользовательский интерфейс или по фоновому потоку?
9 ответов
просто для записи для тех, кто новичок в Android или, возможно, переходит на Android из iOS ..........
пока что-то кардинально не изменится, Вы абсолютно должны использовать Пикассо. Это не шутка.
честно говоря, это очень просто. Преимущества невероятны.
это простой в использовании:
Picasso.
with(State.mainContext).
load(parseImageFile.getUrl()).
into(null);
вы очень просто:
должен делать кэширование и резьбу, с обработкой изображений на Android.
Это простой. Если вы не хотите пишут, что с нуля, вы просто должны использовать Пикассо.
отметим, что ParseImageFile по сути не работает - это совершенно бесполезно о кэшировании и так далее. Есть замечательные альтернативы Пикассо (например, универсальный загрузчик изображений, проверьте это), но никто не работает так хорошо, как Пикассо, на данный момент 2014.
Примечание если вы переходите к супер-продвинутым-питания... The только лучше чем Пикассо должен сделать ход в залп. но это огромный скачок.
обратите внимание, что прокрутка ListView на android намного более проблематична, чем прокрутка таблицы в iOS. Можно сказать, Android + Picasso больше похож на ситуацию на iOS, где вся работа уже сделана для прокрутки больших табличных представлений с изображениями.
на сегодня Пикассо-просто-центральная часть любого приложения для Android. Слава богу, это одна строка кода - нет установки, ничего.
опять же, единственное, что" лучше " Пикассо, это если вы перейдете к волейболу.
кстати вот отличная длинная статья о Volley v. Picasso, если вам это нужно...
http://www.bignerdranch.com/blog/solving-the-android-image-loading-problem-volley-vs-picasso/
Пикассо загружает изображение в другой поток, и он управляет для вас:
- заполнитель тем временем изображение все еще загружается
- изменение размера
- обрезка / центрирование / масштабирование
- кэширование (вам не нужно загружать изображение каждый раз)
- он даже "изображение исчезает", что сейчас популярно/нормально
Это очень просто, вот пример:
Picasso.with(context)
.load(url)
.placeholder(R.drawable.placeholder)
.resize(imgWidth, imgHeight)
.centerCrop()
.into(image);
Я всегда использовал Библиотека Пикассо для изображений.
Это очень полезно для управления изображениями и не беспокоиться о проблемах с памятью.
Когда я загружал изображения с сервера или json, я использовал
Picasso.with(context).load("image url").fetch();
и я храню этот URL-адрес изображения в базе данных или где-то.
Теперь мы можем использовать это изображение в любом месте (в автономном режиме).
Picasso.with(context).load("image url").into(ImageView);
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() {}
});
вы должны загрузить изображения через библиотеку Пикассо по следующим причинам:
- вы можете поместить заполнитель в случае, если изображения требуется некоторое время для загрузки.
-
fit()
- иногда некоторые изображения не загружаются в imageview из-за размера. Этот метод поможет вам загрузить большие изображения. -
onSuccess()
- вы можете выполнить некоторые действия, когда изображение загружается успешно. -
onError()
- вы можете выполнить некоторые действия, когда существует проблема загрузки изображения.
вы должны использовать библиотеку загрузчика изображений, такую как Picasso, Volley или Universal Image Loader, потому что они делают следующие вещи, которые ваш код не делает:
- эффективная многопоточная сеть (на фоновых потоках, конечно)
- объединение нескольких одинаковых запросов в один сетевой вызов
- отмена отложенных запросов, особенно во время рециркуляции элементов ListView
- кэширование диска и памяти с различным сроком действия политика
- изображения downsampling к целевому размеру представления для того чтобы улучшить представление и уменьшить использование памяти
- пакетные обновления пользовательского интерфейса для улучшения отклика пользовательского интерфейса (по крайней мере, для Volley и Picasso).
кстати, вы никогда не должны выполнять сетевые запросы в потоке пользовательского интерфейса, и поскольку HoneyComb, Android не позволяет вам это делать.
Я знаю, что Picasso-потрясающая библиотека для управления изображениями в ListView и GridView, но среди всех вариантов, включая Picasso, я использую GLIDE...
Он действительно отлично управляет загрузкой и кэшированием...(я не мог заставить Пикассо использовать кэшированные изображения после завершения загрузки, но Glide сделал это так же, как кусок пирога).
вот страница GitHub GLIDE:
https://github.com/bumptech/glide
с уважением....
Если вы будете использовать основной метод загрузки изображения из сети, то потребуется больший объем кода. Но если мы будем использовать стороннюю библиотеку, такую как 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 для этого потребуется больше строк кода.
источник: Пикассо Android Учебник
пожалуйста, добавьте следующую зависимость в ваш build.gradle(Module:app)
compile 'com.github.bumptech.glide:glide:3.6.1'
Picasso автоматически обрабатывает все подводные камни, связанные с загрузкой изображений, такие как кэширование загруженного изображения, поиск кэша, отмена существующего запроса, выполнение преобразования изображений и декодирование, изменение размера и обрезка изображений.
и он позволяет настроить его, вы можете настроить память для кэша, добавить преобразователь запросов, используемый для добавления глобальной информации к каждому запросу, добавить bitmap config для обработки декодирования изображений для формата, не охваченного по умолчанию bitmap конфиг.
Он позволяет указать политику памяти и сетевую политику, которая позволяет использовать кэш или загружать из сети. Он позволяет добавлять изображения заполнителей и ошибок для использования при загрузке и в случае ошибки при загрузке соответственно.
Picasso загружает изображения асинхронно в рабочие потоки.
вот код, использующий последнюю версию 2.71828 Picasso для загрузки изображения в ImageView на worker нитка.
Picasso.get().load(productImageUrl).into(imageView);
ниже код изменяет размер и обрезает изображение.
см http://www.zoftino.com/android-picasso-image-downloading-and-caching-library-tutorial для информации. Пикассо.получить.)(загрузка (productImageUrl).размер(400,400).centerCrop().into (imageView);