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<CloseableReference<CloseableImage>>
            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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章