Как установить фоновое изображение 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);
}
}