Fresco获取缓存中的Bitmap,并设置为背景

最近在开发中,遇到这样的问题:点击用户头像,然后跳转到用户详情页,用户详情页面的背景用用户头像模糊处理后设置进去。
由于用户动态页面的头像都是用fresco通过url加载显示的。所以我必须获取到用户头像在内存中的bitmap。然后才能进行处理。

直接上代码:

public static void getFrescoCacheBitmap(final Handler handler, Uri uri, Context context){
       // final Bitmap frescoTepBm;
    ImageRequest imageRequest = ImageRequestBuilder
            .newBuilderWithSource(uri)
            .setProgressiveRenderingEnabled(true)
            .build();
    ImagePipeline imagePipeline = Fresco.getImagePipeline();
    DataSource>
            dataSource = imagePipeline.fetchDecodedImage(imageRequest, context);
    dataSource.subscribe(new BaseBitmapDataSubscriber() {
        @Override
        public void onNewResultImpl(Bitmap bitmap) {
            if (bitmap == null) {
               // Log.e(TAG,"保存图片失败啦,无法下载图片");
                handler.sendEmptyMessage(0);
                return;
            }
            Message message=new Message();
            message.obj=bitmap;
            handler.sendMessage(message);
        }

        @Override
        public void onFailureImpl(DataSource dataSource) {
            handler.sendEmptyMessage(0);
        }
    }, CallerThreadExecutor.getInstance());
    }
解释一下:由于此段代码在获取Bitmap时是异步的,所以要想返回获取到Bitmap,我是利用了Handle对象,在获取到后发送了一个携带Bitmap对象的message,这样在要用到这个bitmap的时候就可以通过handle来获取了。
附上调用此方法的activity中handle对象的声明:


private Handler handle=new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Bitmap bitmap = (Bitmap)msg.obj;
if(bitmap!=null){
String filepath=ImageFactory.savePhoto(bitmap, Environment
.getExternalStorageDirectory().getAbsolutePath().toString() + "/clocle/temp_img/","userphoto");
Bitmap userphotoBm=BitmapFactory.decodeFile(filepath);
//Bg_blur.blur(Other_Self_infos.this,bitmap)
//Bg_blur.blur(Other_Self_infos.this,bitmap);
other_self_bg.setImageBitmap(Bg_blur.blur(Other_Self_infos.this,userphotoBm));
//other_self_bg.setImageBitmap(userphotoBm);
}
}
};
这样基本就完成需求了。。

参考:

http://www.jianshu.com/p/565e5b0ca823

你可能感兴趣的:(开发笔记)