Что такое android picasso

Picasso

Как известно, знаменитый художник Пабло Пикассо любил котов. Есть фотография, подтверждающая его любовь.

Художник нарисовал несколько картин с котом. Одна из них.

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

Официальная страница библиотеки от авторов, где можно найти ссылки на документацию и примеры.

В Android Studio прописываем зависимость в Gradle (проверяйте номер свежей версии).

Сейчас на сайте есть новая версия с новым пакетом implementation ‘com.squareup.picasso:picasso:2.71828’, которая является промежуточным вариантом для перехода на ветку 3.х. При этом некоторые вызовы методов изменились. Будьте внимательны. Смотрите новую статью с примерами на Kotlin.

Вот как просто загрузить картинку из сети:

Вы указываете адрес картинки (url), заглушку (placeholder), заглушку для ошибки после трёх неудачных попыток загрузки (error) и в методе into() указываете компонент ImageView, в который загружаете изображение.

При загрузке картинка кэшируется и при повторном запросе на скачивание библиотека может достать картинку из кэша, а не скачивать из интернета, что ускоряет работу приложения. Если кэш будет переполнен или удалён пользователем, то картина снова скачается из сети. Очень удобно.

Если вы храните большие картинки в ресурсах или на внешнем накопителе, то рекомендуется использовать отдельный процесс для загрузки. Библиотека уже настроена на работу в асинхронном режиме, поэтому вы можете использовать её и в этих случаях.

Не забывайте про метод библиотеки fit(), который уменьшает размер картинки перед размещением в ImageView. Это полезно для экономии ресурсов, если вам в реальности нужна маленькая картинка, а не оригинал.

Трансформация

У библиотеки есть специальный метод transform() для манипуляций с изображениями. Вам нужно создать собственную реализацию и передать её в метод. Например, на сайте разработчика приведён пример кадрирования изображения, когда создаётся квадратная картинка по наименьшей стороне.

Сначала создаётся отдельный класс с интерфейсом Transformation, который требует реализовать два метода transform() и key().

Для наглядности разместим два компонента ImageView и посмотрим на результат после нажатия на кнопку.

Другой пример трансформации — перекраска изображения. В Android 5.0 появилась возможность перекрашивать значки встроенными средствами. Для старых устройств можно воспользоваться библиотекой (взято отсюда). Создадим новый класс:

Пробуем на этой же картинке.

Круглый аватар

Ещё один пример, позволяющий создавать круглые картинки, которые можно использовать в качестве аватаров.

Разместим на экране ImageView и зададим размер аватара 150 пикселей.

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

Техника, используемая в примере, не совсем эффективна. Для подобных целей рекомендуется использовать шейдеры. Переписанный пример класса.

В этом примере используется пустой конструктор без параметров, который равносилен значению 0 из предыдущего примера. Вы можете доработать пример, добавив возможность указания радиуса, как это реализовано в том примере.

Читайте также:  Crazy drive для android

Новые возможности

В статье описаны новые возможности для версии 2.4.

Появилась возможность встроить собственные обработчики запросов, если у вас используется нестандартная схема вместо http, res и т.п.

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

Чтобы протестировать библиотеку в боевых условиях, я написал приложение Коты Василия Ложкина. Результатом доволен.

Источник

Что такое android picasso

Сегодня нас ожидает интересный урок в котором мы научимся основам работы с довольно популярной библиотекой для Android — Picasso. Что представляет с себя эта библиотека? Picasso позволяет разработчикам производить загрузку в свои приложения изображений с различных ресурсов сети (задавать адреса нахождения изображений нужно вручную), а также предлагает разнообразную работу над этими изображениями перед показом их пользователю (например, определение размера отображаемой картинки, возможность поворота и т.д.).

Создаем новый проект, выбираем Blank Activity. Для начала, чтобы наше приложение смогло работать с библиотеками Picasso, их нужно установить. Как это делать было уже подробно рассмотрено в статье про подключение библиотек. Кратко напомню: жмем File — Project Structure, вкладка Dependencies, жмем на зеленый плюсик, выбираем Library Dependency:

и в открывшемся окне находим библиотеку Picasso:

После этого придется немного подождать пока Android Studio применит новые настройки к проекту.

Теперь приступаем к самому приложению. Нам нужно для начала создать несколько элементов ImageView в которых будут отображаться загруженные с помощью Picasso изображения. Открываем файл activity_main.xml и добавим туда следующее:

Мы добавили 4 элемента ImageView, картинки ic_launcher здесь применены исключительно для наглядности:

Так как наше приложение будет загружать изображения с Интернета, то нашему приложению нужно дать разрешение на использование Интернета. Идем в файл манифеста AndroidManifest.xml и добавим туда строку (перед тегом ):

Ну а теперь переходим к работе в файле MainActivity.java. Нам нужно объявить 4 объекта типа ImageView, привязать их к нашим элементам и, используя библиотеку Picasso, загрузить 4 изображения и отобразить их в объявленных ImageView. Вот полный код MainActivity.java:

Объяснения по Picasso даны прямо в коде, но все таки обратим внимание на них еще раз. Подключаем библиотеку командой Picasso.with(this) — для нашего Activity подключается использование библиотеки Picasso. Далее по самой библиотеке:

.load — команда для загрузки изображения с ресурса;

.error — указываем, что будет отображено в случае сбоя загрузки;

.placeholder — настраиваем изображение, которое будет показываться в элементах ImageView пока не загрузятся изображения с Интернета;

.resize — выставляем размер изображения, которое отобразится;

.into — ссылаемся на элемент ImageView в котором будет отображено изображение.

Вот в принципе и все! Надеюсь у вас все получилось, тут все на самом деле довольно просто. Запускаем наше приложение и тестируем:

Читайте также:  Как разблокировать андроид huawei от графического ключа

Источник

Picasso

A powerful image downloading and caching library for Android

Introduction

Images add much-needed context and visual flair to Android applications. Picasso allows for hassle-free image loading in your application—often in one line of code!

Many common pitfalls of image loading on Android are handled automatically by Picasso:

  • Handling ImageView recycling and download cancelation in an adapter.
  • Complex image transformations with minimal memory use.
  • Automatic memory and disk caching.

Features

Adapter Downloads

Adapter re-use is automatically detected and the previous download canceled.

Image Transformations

Transform images to better fit into layouts and to reduce memory size.

You can also specify custom transformations for more advanced effects.

Pass an instance of this class to the transform method.

Place Holders

Picasso supports both download and error placeholders as optional features.

A request will be retried three times before the error placeholder is shown.

Resource Loading

Resources, assets, files, content providers are all supported as image sources.

Debug Indicators

For development you can enable the display of a colored ribbon which indicates the image source. Call setIndicatorsEnabled(true) on the Picasso instance.

Download

The source code to the Picasso, its samples, and this website is available on GitHub.

Maven

Gradle

Contributing

If you would like to contribute code you can do so through GitHub by forking the repository and sending a pull request.

When submitting code, please make every effort to follow existing conventions and style in order to keep the code as readable as possible. Please also make sure your code compiles by running mvn clean verify .

Before your code can be accepted into the project you must also sign the Individual Contributor License Agreement (CLA).

Источник

Экономим память: Picasso vs UniversalImageLoader

Привет, Android-разработчики!
Я думаю, каждый из нас сталкивается с загрузкой изображений по URL. Самый простой способ решения этой задачи: использовать готовую стороннюю библиотеку. Как правило, одним из таких готовых решений оказывается Universal Image Loader (UIL), Picasso. Когда я спрашиваю у разработчика, почему он выбрал ту или иную библиотеку, то, как правило, получаю разные ответы. Например, «у Picasso/UIL нет проблем с memory leaks», или «Square делают только правильные вещи», или просто «Да вот использую UIL, работает – и хорошо».
Так вот, мне стало интересно: какая из этих 2-х библиотек оптимально использует память? Я использую UIL и имею проблему с OutOfMemory на старых устройствах. Возможно, Picasso это лекарство?
Так появилась идея этого benchmark-а.

Цель тестирования: определить, какая из библиотек (UIL или Picasso) минимально использует память устройства.

Тест кейсы:
— Загрузка маленьких изображений (240х240)
— Загрузка больших изображений (>400px по любому из габаритов)
— Загрузка больших изображений и преобразование их размера к габаритам ImageView
— Загрузка маленьких изображений и их показ в виде круглой картинки
— Загрузка больших изображений и показ их в конфигурации RGB565

Читайте также:  Как запустить безопасный режим для андроид

Методика выполнения теста:
В качестве списка используем GridView шириной в 2 столбца. Адаптер настраивается отдельно под каждый тест кейс. В адаптер отдаем список заранее подготовленных URL, создавая, таким образом, одинаковые условия тестирования.
С периодом в 1 сек, список автоматически делает один проход вниз, а потом вверх с шагом в 4 изображения. По каждому шагу производится измерение памяти, использованной приложением.
Измеряем использованную память в 3 этапа для каждого тест кейса:
— первый запуск — с чистым кешем приложения;
— второй запуск: не закрывая приложение после первого прохода;
— третий запуск – после повторного открытия приложения без чистки кеша.
По окончанию выполнения тест кейса, я дополнительно записывал размер кеша, что тоже немаловажно для старых устройств.

Исходники Benchmark-а можно найти по ссылке
github.com/artemmanaenko/ImageLoadersTest. Проект собран под Gradle.

Итак, ниже результаты по каждому тест кейсу. Ось Y – используемая приложением память в Мб. Ось Х – время проведения тест кейса.

Загрузка маленьких изображений


Размер кеша: Picasso=1.39 Мб, UIL=1.17 Мб

Загрузка больших изображений


Размер кеша: Picasso=3,67 Мб, UIL=5,44 Мб

Загрузка больших изображений с преобразованием до размера ImageView


Размер кеша: Picasso=3,67 Мб, UIL=5,44 Мб

Загрузка маленьких изображений и их обрезка до круглой картинки


Размер кеша: Picasso=1.39 Мб, UIL=1.17 Мб

Загрузка больших изображений и показ их в конфигурации RGB565

Результаты экспериментов с большими картинками меня впечатлили, и я решил, что стоит попробовать настроить конфигурацию UIL. Чтобы не сильно загружать память кешем – я попробовал отключить у UIL кеш в RAM. И, как вариант, установить кешируемый габарит картинки – не более, чем в половину экрана.

На основе эксперимента я сделал следующие выводы:

  • Если ваши списки работают с маленькими изображениями (сравнимыми с размером ImageView) – выбор библиотеки для вас не принципиален. Picasso создает чуть больший кеш на диске, при этом используя меньше RAM примерно на тот же размер.
  • Picasso показала потрясающие результаты по управлению памятью, работая с большими изображениями. UIL, по всей видимости, хранит оригинал изображения в памяти. Picasso хранит уже преобразованный размер картинки. Потому и кеш на диске у Picasso значительно меньше.
  • UIL может работать с той же эффективностью, что и Picasso, если его дополнительно настроить. Например, ограничить размер кеша в памяти. Или, как в одном из тестов – ограничить вручную размер кешируемых фотографий. Второй способ может быть непригоден для использования, поскольку устанавливает глобальную конфигурацию ImageLoader-а.
  • Работа с круглыми аватарами обходится «дешевле» через Picasso. Но, опять же, за счет того, что я вручную вызывал recycle() у оригинального Bitmap-а. Такое же действие можно выполнить и в UIL, устанавливая переопределенный BitmapDisplayer.
  • Picasso предельно проста в использовании и уже «с коробки» работает с памятью эффективно. Так выглядит инициализация и выполнение загрузки для библиотек:

Источник

Оцените статью