web-dev-qa-db-fra.com

Chargement de ressources images dans Drawable dans SimpleDraweeView de Fresco

J'ai utilisé Fresco 0.5.2:

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

Je veux utiliser SimpleDraweeView pour charger une image gif de drawable. Voici mon 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);

Le default_app est juste une image jpeg et cela ne fonctionne pas.

J'ai utilisé ceci comme la documentation de Fresco mentionnée . Y at-il un problème avec le chemin ou le code?

17
Freddy

Pour obtenir l'URI de l'image de ressource à charger dans Fresco, utilisez "res: /" au lieu de ContentResolver.SCHEME_Android_RESOURCE, qui est utilisé pour URI en temps normal .

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);

Vous devriez également pouvoir utiliser cet URI avec un DraweeController.

Voici les URI prises en charge de Fresco. 

55
Sebastian

J'utilise Fresco 0.7.0

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

Si vous utilisez proguard, vous devez ajouter ces lignes dans votre fichier proguard:

-keep class com.facebook.imagepipeline.gif.** { *; }
-keep class com.facebook.imagepipeline.webp.** { *; }
22
lfmn

Essayez d'utiliser ceci:

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

Pas besoin d'utiliser ImageRequest ou DraweeController.

8
leocadiotine

Essayez d'utiliser ceci:

UriUtil.getUriForResourceId (resId)

1

Il y a une implémentation du code de NoActivity.Java dans la bibliothèque Fresco:

ImageRequestBuilder.newBuilderWithResourceId(R.drawable.resId).build()
1
Estel