如何在代码中使用 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);
}
}
之前以为Fresco可以完全替代Picasso
例如,我可以使用 Picasso 加载位图并将其设置在 任何 视图上,使用
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);
}
}