Загрузка ресурса изображения для рисования в SimpleDraweeView от Fresco

Я использовал 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, и оно не работает.

Я использовал это в качестве документации, упомянутой на фреске. Есть ли проблемы с путем или кодом?

7 ответов

Решение

Чтобы получить 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.

Вот поддерживаемые Fresco URI.

Я использую 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.** { *; }

Попробуйте использовать это:

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

Нет необходимости использовать ImageRequest или DraweeController.

Попробуйте использовать это:

UriUtil.getUriForResourceId (Resid)

Ты можешь использовать

draweeView.setActualImageResource(R.drawable.background);

В библиотеке Fresco есть реализация кода NoActivity.java:

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

Обратите внимание, что рисуемый объект XML нельзя напрямую использовать в качестве изображения в SimpleDraweeView.

Но, как говорится в документации ,«если вы хотите отобразить XML-рисунок в качестве основного изображения, установите его в качестве заполнителя и используйте нулевой uri».

      draweeView.setImageURI(null as String?)
draweeView.hierarchy.setPlaceholderImage(drawableImage)
Другие вопросы по тегам