Загрузка ресурса загружаемого изображения в Fresco SimpleDraweeView
Я использовал Fresco 0.5.2:
dependencies {
compile 'com.facebook.fresco:fresco:0.5.2'
}
Я хочу использовать SimpleDraweeView
для загрузки gif-изображения из drawable
.
Вот мой код:
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.
Есть ли проблема с путём или кодом?
Ответы
Ответ 1
Чтобы получить URI изображения ресурса, который будет загружен в Fresco, используйте "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.
Ниже приведены Frescos поддерживаемые URI.
Ответ 2
Я использую 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.** { *; }
Ответ 3
Попробуйте использовать это:
String path = "res:/" + R.drawable.default_app; // Only one slash after res:
simpleDraweeView.setImageURI(Uri.parse(path));
Не нужно использовать ImageRequest или DraweeController.
Ответ 4
В библиотеке Fresco реализована реализация кода NoActivity.java:
ImageRequestBuilder.newBuilderWithResourceId(R.drawable.resId).build()
Ответ 5
Попробуйте использовать это:
UriUtil.getUriForResourceId(Resid)