Szukaj…


Wprowadzenie

Fresco to potężny system do wyświetlania obrazów w aplikacjach na Androida.

W Androidzie 4.x i starszych Fresco umieszcza obrazy w specjalnym regionie pamięci Androida (zwanym ashmem). Dzięki temu Twoja aplikacja działa szybciej - i znacznie rzadziej cierpi przerażający OutOfMemoryError.

Fresco obsługuje również przesyłanie strumieniowe plików JPEG.

Uwagi

Jak skonfigurować zależności w pliku build.gradle na poziomie aplikacji:

dependencies {
    // Your app's other dependencies.
    compile 'com.facebook.fresco:fresco:0.14.1' // Or a newer version if available.
}

Więcej informacji można znaleźć tutaj .

Pierwsze kroki z Fresco

Najpierw dodaj Fresco do build.gradle jak pokazano w sekcji Uwagi:

Jeśli potrzebujesz dodatkowych funkcji, takich jak animowane wsparcie GIF lub WebP, musisz również dodać odpowiednie artefakty Fresco .

Fresk musi zostać zainicjowany. Powinieneś to zrobić tylko 1 raz, więc umieszczenie inicjalizacji w Application jest dobrym pomysłem. Przykładem tego może być:

public class MyApplication extends Application {
    @Override
    public void onCreate() {
        super.onCreate();
        Fresco.initialize(this);
    }
}

Jeśli chcesz załadować zdalne obrazy z serwera, Twoja aplikacja wymaga pozwolenia na internt. Po prostu dodaj go do AndroidManifest.xml :

<uses-permission android:name="android.permission.INTERNET" />

Następnie dodaj SimpleDraweeView do swojego układu XML. Fresk nie obsługuje wrap_content dla wymiarów obrazu, ponieważ możesz mieć wiele obrazów o różnych wymiarach (obraz zastępczy, obraz błędu, obraz rzeczywisty, ...).

Możesz więc dodać SimpleDraweeView ze stałymi wymiarami (lub match_parent ):

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="120dp"
    android:layout_height="120dp"
    fresco:placeholderImage="@drawable/placeholder" />

Lub podaj współczynnik kształtu obrazu:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="120dp"
    android:layout_height="wrap_content"
    fresco:viewAspectRatio="1.33"
    fresco:placeholderImage="@drawable/placeholder" />

Na koniec możesz ustawić swój identyfikator URI obrazu w Javie:

SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI("http://yourdomain.com/yourimage.jpg");

Otóż to! Powinieneś widzieć swój symbol zastępczy do pobrania, dopóki obraz sieci nie zostanie pobrany.

Używanie OkHttp 3 z Fresco

Po pierwsze, oprócz normalnej zależności Fresco Gradle, musisz dodać zależność OkHttp 3 do swojego build.gradle :

compile "com.facebook.fresco:imagepipeline-okhttp3:1.2.0" // Or a newer version.

Podczas inicjowania Fresco (zwykle w niestandardowej implementacji Application ) możesz teraz określić klienta OkHttp:

OkHttpClient okHttpClient = new OkHttpClient(); // Build on your own OkHttpClient.

Context context = ... // Your Application context.
ImagePipelineConfig config = OkHttpImagePipelineConfigFactory
        .newBuilder(context, okHttpClient)
        .build();
Fresco.initialize(context, config);

Streaming JPEG z Fresco za pomocą DraweeController

W tym przykładzie założono, że już dodałeś Fresco do swojej aplikacji (zobacz ten przykład ):

SimpleDraweeView img = new SimpleDraweeView(context);
ImageRequest request = ImageRequestBuilder
        .newBuilderWithSource(Uri.parse("http://example.com/image.png"))
        .setProgressiveRenderingEnabled(true) // This is where the magic happens.
        .build();

DraweeController controller = Fresco.newDraweeControllerBuilder()
        .setImageRequest(request)
        .setOldController(img.getController()) // Get the current controller from our SimpleDraweeView.
        .build();

img.setController(controller); // Set the new controller to the SimpleDraweeView to enable progressive JPEGs.


Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow