Думаю немногие слышали о Fresco, а многие о ней вовсе не слышали. В этой статье я постараюсь описать функциональные возможности библиотеки.
Итак, Fresco — многофункциональная библиотека для асинхронной загрузки и отображения изображений с тремя уровнями кеширования (2 в памяти, 1 в internal storage). Поддерживает форматы: JPEG, PNG, GIF и WebP. Так же с помощью Fresco можно поставить ProgressBar непосредственно на View, что очень удобно.
Использование Fresco
Для использования требуется добавить зависимость в Gradle:
или с помощью Maven
Далее фреско требует чтобы её инициализировали, есть два варианта: либо инициализировать каждый раз в onCreate Activity, либо инициализировать один раз в Application.
Добавить Internet Permission в манифест, если планируете загружать изображения из вне.
В тех местах, где вы планируете использовать Fresco, требуется вместо ImageView использовать класс, унаследованный от GenericDraweeView, но не переживайте, если Вам не требуется особых фишек, которые не предоставляет библиотека, можно использовать SimpleDraweeView, любезно предоставленная Fresco.
Пример использования XML:
Для загрузки изображения:
Как видите, всё крайне просто.
Итак: как Вы можете заметить, библиотеку Fresco сложнее подключить и использовать, чем, например Picasso, но в случае если Вам мало функциональности Picasso, и требуется что-то нетипичное, то библиотека Fresco идеально Вам подойдёт, так как она гибкая и расширяемая практически везде.
Ссылка на документацию: http://frescolib.org
Ссылка на GitHub: https://github.com/facebook/fresco
Итак, Fresco — многофункциональная библиотека для асинхронной загрузки и отображения изображений с тремя уровнями кеширования (2 в памяти, 1 в internal storage). Поддерживает форматы: JPEG, PNG, GIF и WebP. Так же с помощью Fresco можно поставить ProgressBar непосредственно на View, что очень удобно.
Использование Fresco
Для использования требуется добавить зависимость в Gradle:
compile 'com.facebook.fresco:fresco:0.6.1'
или с помощью Maven
<dependency>
<groupId>com.facebook.fresco</groupId>
<artifactId>fresco</artifactId>
<version>0.6.1</version>
</dependency>
Далее фреско требует чтобы её инициализировали, есть два варианта: либо инициализировать каждый раз в onCreate Activity, либо инициализировать один раз в Application.
Fresco.initialize(context);
Добавить Internet Permission в манифест, если планируете загружать изображения из вне.
<uses-permission android:name="android.permission.INTERNET"/>
В тех местах, где вы планируете использовать Fresco, требуется вместо ImageView использовать класс, унаследованный от GenericDraweeView, но не переживайте, если Вам не требуется особых фишек, которые не предоставляет библиотека, можно использовать SimpleDraweeView, любезно предоставленная Fresco.
Пример использования XML:
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/simpleDraweeView"
android:layout_width="match_parent"
android:layout_height="match_parent"
fresco:fadeDuration="300"
fresco:roundAsCircle="false" />
Для загрузки изображения:
Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.simpleDraweeView);
draweeView.setImageURI(uri);
Как видите, всё крайне просто.
Итак: как Вы можете заметить, библиотеку Fresco сложнее подключить и использовать, чем, например Picasso, но в случае если Вам мало функциональности Picasso, и требуется что-то нетипичное, то библиотека Fresco идеально Вам подойдёт, так как она гибкая и расширяемая практически везде.
Ссылка на документацию: http://frescolib.org
Ссылка на GitHub: https://github.com/facebook/fresco
Комментарии (9)
artemgapchenko
17.08.2015 16:22+1… библиотека Fresco идеально Вам подойдёт, так как она гибкая и расширяемая практически везде.
Как-то не совсем убедительно звучит. Есть же уже Picasso, Glide, UIL — это то, что пришло в голову с ходу. И из переведенной вами статьи непонятно, чем Fresco лучше.
Насколько я понял по чтению официальной документации и из статьи Square, в которой они объясняли причины создания LeakCanary (тыц и тыц), вся соль Fresco в том, что в Android 4.x и ниже, она Bitmap не использует, использует вместо этого какое-то свое представление изображений и укладывает картинки в особый регион памяти (который, скорее всего, расположен вне heap раздела). И в итоге получается, что памяти отъедается гораздо меньше, чем при использовании стандартных ImageView/BitmapDrawable. Плюс есть поддержка progressive JPEG, которая отсутствует в стандартном SDK.
Arturka
17.08.2015 20:36+1Тема особо не раскрыта, точнее, не раскрыта совсем. У них хорошая документация, можно было бы и добавить что-то в статью. А вообще, это библиотека очень мощная, как и всегда у фейсбука) Но при этом такая мощь бывает нужна нечасто, подавляющему большинство проектов с лихвой хватит Picasso / Glide / UIL.
Suvitruf
Странно, что только Gradle и ADT версии описаны в документации, хотя, к счастью, у них есть и Maven версия:
Bringoff
Вообще-то Gradle и Maven, грубо говоря, взаимозаменяемы. То есть, в любой Gradle-записи
compile 'com.facebook.fresco:fresco:0.6.1'
до первого двоеточия groupId, между первым и вторым artifactId, и в конце version. Так что смысла описывать подключение зависимости для Gradle и Maven отдельно я не вижу.Suvitruf
Может я чего-то не понимаю, но разве у Gradle и Maven не разные репо? Вполне может быть, что в Maven репо будет не последняя версия либы, учитывая, что нынче все переходят на Android Studio и первично собирают Gradle версию.
Bringoff
Что мешает подключить репу?
kivsiak
Вы заблуждаетесь. Maven, gradle, sbt, ivy — все используют одни и теже репозитории.
HotIceCream
Разве формат у ivy и maven репозиторием одинаковый? Я почему спрашиваю — в gradle можно подключить и те и те репозитории, но необходимо отдельно указывать формат — ivy это или maven. Поэтому возникает предположение, что они разные.
docs.gradle.org/current/dsl/org.gradle.api.artifacts.repositories.IvyArtifactRepository.html
docs.gradle.org/current/javadoc/org/gradle/api/artifacts/repositories/MavenArtifactRepository.html
Zabelnikov
Добавил в статью.