19

我使用Fresco 0.5.2

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

我想用来SimpleDraweeViewdrawable. 这是我的代码:

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 的文档中提到的。路径或代码有问题吗?

4

6 回答 6

61

要在 Fresco 中获取要加载的资源图像的 URI,请使用“res:/”而不是 ContentResolver.SCHEME_ANDROID_RESOURCE,它在正常情况下用于URI 。

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支持的 URI

于 2015-07-09T07:06:07.693 回答
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.** { *; }
于 2015-12-02T13:31:31.347 回答
9

尝试使用这个:

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

无需使用 ImageRequest 或 DraweeController。

于 2015-08-31T21:48:56.940 回答
3

尝试使用这个:

UriUtil.getUriForResourceId(resId)

于 2017-11-28T07:16:49.187 回答
2

您可以使用

draweeView.setActualImageResource(R.drawable.background);

于 2019-01-02T15:52:05.540 回答
1

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

ImageRequestBuilder.newBuilderWithResourceId(R.drawable.resId).build()
于 2015-10-08T10:25:43.007 回答