Android
Fresque
Recherche…
Introduction
Fresco est un système puissant pour afficher des images dans les applications Android.
Dans Android 4.x et versions ultérieures, Fresco place les images dans une région particulière de la mémoire Android (appelée ashmem). Cela permet à votre application de s'exécuter plus rapidement et de faire face à la redoutable OutOfMemoryError beaucoup moins souvent.
Fresco prend également en charge la diffusion de fichiers JPEG.
Remarques
Comment configurer des dépendances dans le fichier build.gradle au niveau de l'application:
dependencies {
// Your app's other dependencies.
compile 'com.facebook.fresco:fresco:0.14.1' // Or a newer version if available.
}
Plus d'informations peuvent être trouvées ici .
Premiers pas avec Fresco
Tout d'abord, ajoutez Fresco à votre build.gradle
comme indiqué dans la section Remarques:
Si vous avez besoin de fonctionnalités supplémentaires, telles que le support GIF ou WebP animé, vous devez également ajouter les artefacts de fresques correspondants.
La fresque doit être initialisée. Vous ne devriez le faire qu'une seule fois, il est donc judicieux de placer l'initialisation dans votre Application
. Un exemple pour cela serait:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Si vous souhaitez charger des images distantes depuis un serveur, votre application a besoin de l'autorisation internt. Ajoutez-le simplement à votre AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />
Ensuite, ajoutez un SimpleDraweeView
à votre disposition XML. Fresco ne prend pas en charge wrap_content
pour les dimensions de l'image, car vous pouvez avoir plusieurs images de dimensions différentes (image de substitution, image d'erreur, image réelle, ...).
Vous pouvez donc soit ajouter un SimpleDraweeView
avec des dimensions fixes (ou 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" />
Ou fournissez un ratio d'aspect pour votre image:
<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" />
Enfin, vous pouvez définir votre URI d'image en Java:
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI("http://yourdomain.com/yourimage.jpg");
C'est tout! Votre espace réservé doit pouvoir être dessiné jusqu’à ce que l’image réseau ait été récupérée.
Utiliser OkHttp 3 avec Fresco
Tout d'abord, en plus de la dépendance normale de Fresco Gradle, vous devez ajouter la dépendance OkHttp 3 à votre build.gradle
:
compile "com.facebook.fresco:imagepipeline-okhttp3:1.2.0" // Or a newer version.
Lorsque vous initialisez Fresco (généralement dans votre implémentation d' Application
personnalisée), vous pouvez maintenant spécifier votre client 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 avec Fresco en utilisant DraweeController
Cet exemple suppose que vous avez déjà ajouté Fresco à votre application (voir cet exemple ):
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.