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

时间:2017-04-13 09:03:41

标签: android fresco

早些时候,我认为Fresco可以作为毕加索的完全替代品。

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

这是否支持Fresco?

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

1 个答案:

答案 0 :(得分:0)

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

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);
    }
}