Думаю немногие слышали о 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)


  1. Suvitruf
    17.08.2015 14:40
    +3

    Странно, что только Gradle и ADT версии описаны в документации, хотя, к счастью, у них есть и Maven версия:

    <dependency>
    	<groupId>com.facebook.fresco</groupId>
    	<artifactId>fresco</artifactId>
    	<version>0.6.1</version>
    </dependency>
    
    


    1. Bringoff
      17.08.2015 14:52
      +2

      Вообще-то Gradle и Maven, грубо говоря, взаимозаменяемы. То есть, в любой Gradle-записи compile 'com.facebook.fresco:fresco:0.6.1' до первого двоеточия groupId, между первым и вторым artifactId, и в конце version. Так что смысла описывать подключение зависимости для Gradle и Maven отдельно я не вижу.


      1. Suvitruf
        17.08.2015 15:00

        Может я чего-то не понимаю, но разве у Gradle и Maven не разные репо? Вполне может быть, что в Maven репо будет не последняя версия либы, учитывая, что нынче все переходят на Android Studio и первично собирают Gradle версию.


        1. Bringoff
          17.08.2015 15:17

          Что мешает подключить репу?


        1. kivsiak
          17.08.2015 15:30
          +2

          Вы заблуждаетесь. Maven, gradle, sbt, ivy — все используют одни и теже репозитории.


          1. HotIceCream
            17.08.2015 22:32
            +1

            Разве формат у 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


    1. Zabelnikov
      17.08.2015 16:08

      Добавил в статью.


  1. 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.


  1. Arturka
    17.08.2015 20:36
    +1

    Тема особо не раскрыта, точнее, не раскрыта совсем. У них хорошая документация, можно было бы и добавить что-то в статью. А вообще, это библиотека очень мощная, как и всегда у фейсбука) Но при этом такая мощь бывает нужна нечасто, подавляющему большинство проектов с лихвой хватит Picasso / Glide / UIL.