想要快速快速地共享壁画缓存图像形式loacl存储
fresco返回带回调的位图,有时需要时间来获取图像。
首先不能通过对存储图像temp的意图需求共享直接位图,然后共享图像的文件路径URI。
ImageRequest imageRequest = ImageRequestBuilder
.newBuilderWithSource(httpUri(article.getImage())).setAutoRotateEnabled(true)
.build();
ImagePipeline imagePipeline = Fresco.getImagePipeline();
final DataSource<CloseableReference<CloseableImage>>
dataSource = imagePipeline.fetchDecodedImage(imageRequest, view.getContext());
dataSource.subscribe(new BaseBitmapDataSubscriber() {
@Override
public void onNewResultImpl(@Nullable Bitmap bitmap) {
if (dataSource.isFinished() && bitmap != null) {
String pathofBmp = MediaStore.Images.Media.insertImage(view.getContext().getContentResolver(), bitmap, "APp", null);
Uri bmpUri = Uri.parse(pathofBmp);
ShareCompat.IntentBuilder.from((Activity) parent.getContext())
.setChooserTitle(R.string.share)
.setText(format("%s via App %s", title, ""))
.setSubject(format("%s via App", title))
.setStream(bmpUri)
.setType("image/jpeg")
.startChooser();
dataSource.close();
}
dataSource.close();
}
答案 0 :(得分:1)
在上面构建ImageRequest时,请添加以下行:
.setLowestPermittedRequestLevel(BITMAP_MEMORY_CACHE)
然后您可以假设数据源会立即返回,您可以致电DataSource.hasResult()
和DataSource.getResult()
立即获取您的位图。
您仍然必须关注rules for closeable references。
答案 1 :(得分:0)
我正在使用不同的方法。只需使用postProcessor来获取位图。
setPostprocessor(new BasePostprocessor() {
@Override
public void process(Bitmap bitmap) {
super.process(bitmap);
draweeBitmap = bitmap;
}
});
现在您拥有了位图,因此您可以在应用中保存某个位置。文件夹或SD卡并分享。
答案 2 :(得分:0)
您不能使用closeableimage,而需要使用CloseableAnimatedImage。 我在同一个问题上苦苦挣扎。