Android
Affresco
Ricerca…
introduzione
Fresco è un potente sistema per la visualizzazione di immagini in applicazioni Android.
In Android 4.xe versioni precedenti, Fresco inserisce le immagini in una regione speciale della memoria Android (chiamata ashmem). Ciò consente alla tua applicazione di funzionare più velocemente e subisce il temuto OutOfMemoryError molto meno spesso.
Affresco supporta anche lo streaming di file JPEG.
Osservazioni
Come impostare le dipendenze nel file build.gradle a livello di app:
dependencies {
// Your app's other dependencies.
compile 'com.facebook.fresco:fresco:0.14.1' // Or a newer version if available.
}
Maggiori informazioni possono essere trovate qui .
Iniziare con Affresco
Per prima cosa aggiungi Fresco al tuo build.gradle
come mostrato nella sezione Note:
Se sono necessarie funzionalità aggiuntive, come GIF animate o supporto WebP, è necessario aggiungere anche gli artefatti da affresco corrispondenti.
L'affresco deve essere inizializzato. Dovresti farlo solo 1 volta, quindi posizionare l'inizializzazione nella tua Application
è una buona idea. Un esempio per questo sarebbe:
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
Se vuoi caricare immagini remote da un server, la tua app necessita dell'autorizzazione interna. Basta aggiungerlo al tuo AndroidManifest.xml
:
<uses-permission android:name="android.permission.INTERNET" />
Quindi, aggiungi un SimpleDraweeView
al tuo layout XML. Affresco non supporta wrap_content
per le dimensioni dell'immagine poiché potresti avere più immagini con dimensioni diverse (immagine segnaposto, immagine di errore, immagine reale, ...).
Quindi puoi aggiungere un SimpleDraweeView
con dimensioni fisse (o 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" />
Oppure fornisci proporzioni per la tua immagine:
<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" />
Infine, puoi impostare l'URI dell'immagine in Java:
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI("http://yourdomain.com/yourimage.jpg");
Questo è tutto! Dovresti vedere il tuo segnaposto disegnabile fino a quando l'immagine di rete è stata recuperata.
Usando OkHttp 3 con Affresco
Innanzitutto, oltre alla normale dipendenza di Fresco Gradle, devi aggiungere la dipendenza di OkHttp 3 al tuo build.gradle
:
compile "com.facebook.fresco:imagepipeline-okhttp3:1.2.0" // Or a newer version.
Quando si inizializza Fresco (di solito nell'implementazione Application
personalizzata), ora è possibile specificare il 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 con affresco utilizzando DraweeController
Questo esempio presume che tu abbia già aggiunto Fresco alla tua app (vedi questo esempio ):
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.