How to Display Low Resolution Image as the Place Holder

Fresco is a powerful system for displaying images in Android applications.

There are situations where the original image is quite big and would take considerable amount of time to load. In such scenarios, it is advisable to display a low resolution image or thumbnail image until the original image loads. Fresco makes it very easy to implement.

Using Fresco in your application

If you are building with Gradle, simply add the following line to the dependencies section of your build.gradle file:

implementation 'com.facebook.fresco:fresco:2.0.0'

For more information on adding Fresco to your app, check out their repository.

Initialise Fresco in Your App

Fresco needs to be initialised. You should only do this 1 time, so placing the initialisation in your Application is a good idea.

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

Add Drawee View for Fresco

Add the SimpleDraweeView to the layout:

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

Using a low-resolution image as the place holder

First, bind the SimpleDraweeView to your View.

@BindView(R.id.mediaDetailImage)    
SimpleDraweeView image;

Next, setup your image view using newDraweeControllerBuilder

private void setupImageView() {
    DraweeController controller = Fresco.newDraweeControllerBuilder()          .setLowResImageRequest(ImageRequest.fromUri(media.getThumbUrl()))           .setImageRequest(ImageRequest.fromUri(media.getImageUrl()))
            .setOldController(image.getController())
            .build();
    image.setController(controller);
}

Fresco lets you specify a low res and original image request.

  • use setLowResImageRequest to set the temporary image. It need not be a static placeholder. It can be fetched and displayed from the server.
  • use setImageRequest to set the original image.

You can read more about ImageRequests here. Also, there’s more documentation about requesting multiple images here.


Written on September 21, 2019 by Vivek Maskara.

Originally published on Medium

Vivek Maskara
Vivek Maskara
SDE @ Remitly

SDE @ Remitly | Graduated from MS CS @ ASU | Ex-Morgan, Amazon, Zeta

Related