Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Loading Drawable Image Resource in Fresco's SimpleDraweeView

Tags:

android

fresco

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?

like image 428
Freddy Avatar asked Jun 17 '15 09:06

Freddy


3 Answers

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.

like image 88
Sebastian Avatar answered Nov 08 '22 10:11

Sebastian


Try using this:

String path = "res:/" + R.drawable.default_app; // Only one slash after res:
simpleDraweeView.setImageURI(Uri.parse(path));

No need to use ImageRequest or DraweeController.

like image 9
leocadiotine Avatar answered Nov 08 '22 10:11

leocadiotine


I'm using Fresco 0.7.0

ImageRequest imageRequest = ImageRequestBuilder.newBuilderWithResourceId(R.drawable.image).build();
SimpleDraweeView draweeView = (SimpleDraweeView) v.findViewById(R.id.picture);
draweeView.setImageURI(imageRequest.getSourceUri());

If you are using proguard you need to add these lines in your proguard file:

-keep class com.facebook.imagepipeline.gif.** { *; }
-keep class com.facebook.imagepipeline.webp.** { *; }
like image 22
lfmn Avatar answered Nov 08 '22 08:11

lfmn