在Fresco的SimpleDraweeView中加载可绘制的图像资源

时间:2015-06-17 09:31:09

标签: android fresco

我使用 Fresco 0.5.2

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

我想使用SimpleDraweeViewdrawable加载gif图片。 这是我的代码:

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

default_app只是一张jpeg图像,但它无法正常工作。

我用它作为Fresco's documentation mentioned。 路径或代码有问题吗?

6 个答案:

答案 0 :(得分:55)

要获取要在Fresco中加载的资源图像的URI,请使用“res:/”而不是用于URIs in a normal case的ContentResolver.SCHEME_ANDROID_RESOURCE。

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

您也应该能够将该URI与DraweeController一起使用。

这是Fresco的supported URIs

答案 1 :(得分:22)

我使用的是Fresco 0.7.0

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

如果您使用的是proguard,则需要在proguard文件中添加以下行:

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

答案 2 :(得分:8)

尝试使用:

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

无需使用ImageRequest或DraweeController。

答案 3 :(得分:1)

在Fresco库中有一个NoActivity.java代码的实现:

{{1}}

答案 4 :(得分:1)

尝试使用:

UriUtil.getUriForResourceId(渣油)

答案 5 :(得分:0)

您可以使用

draweeView.setActualImageResource(R.drawable.background);