我使用 Fresco 0.5.2 :
dependencies {
compile 'com.facebook.fresco:fresco:0.5.2'
}
我想使用SimpleDraweeView
从drawable
加载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。 路径或代码有问题吗?
答案 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);