web-dev-qa-db-ja.com

FrescoのSimpleDraweeViewに描画可能な画像リソースをロードする

私は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のドキュメントを参照 として使用しました。パスまたはコードに問題はありますか?

18
Freddy

FrescoにロードされるリソースイメージのURIを取得するには、ContentResolver.SCHEME_Android_RESOURCEの代わりに「res:/」を使用します。これは 通常の場合は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);

DraweeControllerでもそのURIを使用できるはずです。

フレスコの サポートされているURI です。

55
Sebastian

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.** { *; }
22
lfmn

これを使ってみてください:

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

ImageRequestまたはDraweeControllerを使用する必要はありません。

8
leocadiotine

これを使ってみてください:

UriUtil.getUriForResourceId(resId)

2

使用できます

draweeView.setActualImageResource(R.drawable.background);

0
Max