如何在代码中使用 Fresco 设置 LinearLayout 背景图片

How to set LinearLayout background image with Fresco in code

之前以为Fresco可以完全替代Picasso

例如,我可以使用 Picasso 加载位图并将其设置在 任何 视图上,使用 SO 答案中建议的解决方案。

Fresco 支持吗?

为了更具体地回答我的问题,是否可以在任何视图上使用 Fresco 设置加载图像,而无需创建自定义视图

当然有可能。使用下一个代码:

Uri imageUri = com.facebook.common.util.UriUtil.getUriForResourceId(imgResId);
// or if you use link: 
// Uri imageUri = Uri.parse(webLinkToTheImage);

ImageRequestBuilder builder = ImageRequestBuilder
            .newBuilderWithSource(imageUri)
            .setRequestPriority(Priority.HIGH)
            .setLowestPermittedRequestLevel(ImageRequest.RequestLevel.FULL_FETCH);

    final DataSource<CloseableReference<CloseableImage>> dataSource =
            Fresco.getImagePipeline().fetchDecodedImage(builder.build(), imageUri);

    try {
        dataSource.subscribe(new BaseBitmapDataSubscriber() {
            @Override
            public void onNewResultImpl(@Nullable Bitmap bitmap) {
                if (null != bitmap) {
                    //TODO use bitmap
                }
            }

            @Override
            public void onFailureImpl(DataSource dataSource) {
                if (dataSource != null) {
                    dataSource.close();
                }
            }
        }, new MainThreadExecutor());
    } finally {
        if (dataSource != null) {
            dataSource.close();
        }
    }


public class MainThreadExecutor implements Executor {
    private final Handler handler = new Handler(Looper.getMainLooper());

    @Override
    public void execute(@NonNull Runnable r) {
        handler.post(r);
    }
}