Как установить фоновое изображение LinearLayout с фреской в ​​коде

Ранее я думал, что Фреско можно использовать в качестве полной замены Пикассо.

Например, я могу использовать Picasso для загрузки растрового изображения и установить его в любом представлении, используя решение, предложенное в этом ответе SO.

Это поддерживается с Fresco?

Чтобы быть более конкретным с моим вопросом, возможно ли установить загруженное изображение с помощью Fresco для любого просмотра, не создавая пользовательский вид?

1 ответ

Решение

Конечно, это возможно. Используйте следующий код:

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);
    }
}
Другие вопросы по тегам