androidfresco

Loading Drawable Image Resource in Fresco's SimpleDraweeView


I used Fresco 0.5.2:

dependencies {
   compile 'com.facebook.fresco:fresco:0.5.2'
}

I want to use SimpleDraweeView to load a gif image from drawable. Here is my code:

String path = ContentResolver.SCHEME_ANDROID_RESOURCE + "://"+ getResources().getResourcePackageName(R.drawable.default_app) + "/"
+ getResources().getResourceTypeName(R.drawable.default_app) + "/"
+ getResources().getResourceEntryName(R.drawable.default_app);
Uri uri =  Uri.parse(path);
simpleDraweeView =(SimpleDraweeView)
this.findViewById(R.id.simple_drawee_view);
        ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithSource(uri).build();
        DraweeController controller = Fresco.newDraweeControllerBuilder()
                .setImageRequest(imageRequest)
                .setAutoPlayAnimations(true)
                .build();
        simpleDraweeView.setController(controller);

The default_app is just a jpeg image and it doesn't work.

I used this as the Fresco's documentation mentioned. Is there any problem with the path or code?


Solution

  • To get the URI of the resource image to be loaded in Fresco, use "res:/" instead of ContentResolver.SCHEME_ANDROID_RESOURCE, which is used for URIs in a normal case.

    import com.facebook.common.util.UriUtil;
    
    Uri uri = new Uri.Builder()
        .scheme(UriUtil.LOCAL_RESOURCE_SCHEME) // "res"
        .path(String.valueOf(resId))
        .build();
    // uri looks like res:/123456789
    simpleDraweeView.setImageURI(uri);
    

    You should be able to use that URI with a DraweeController too.

    Here are Fresco’s supported URIs.