2017-01-07 49 views
1

我正在做這樣的事情來同步獲取位圖並使用imageView.setImageBitmap(bitmap)將其設置爲圖像;與glide同步加載圖像並將其緩存在磁盤中

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .into(width, height) 
    .get(); 

我需要做同步,因爲我在AsyncTask的doInBackground裏面做。我需要從後端獲取圖像url,然後才能通過滑動進行加載。之後,我直接通過滑動將相同的url加載到視圖中。 問題是圖像沒有緩存在磁盤中。任何解決方案?

+0

緩存,只有當你留在 –

回答

0

使用diskCacheStrategy

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .diskCacheStrategy(DiskCacheStrategy.ALL) 
    .into(width, height) 
    .get(); 
+0

同一頁雷阿茲喜的作品,diskCacheStrategy返回DrawableRequestBuilder,讓您不再可以使用.asBitmap() – Minas

+0

更新了答案。你試過在'asBitmap()'函數下移動'.diskCacheStrategy(DiskCacheStrategy.ALL)'嗎? –

+0

是的,我嘗試,由於某些原因圖像不會緩存。在下一個屏幕上,我將Glide.with(this).load(mArticle.getImgLink())。轉換爲(imageHeader);然後它開始再次加載圖像。 – Minas

1

添加diskCacheStrategy到你的滑翔,選擇StrategyType爲來源

你可以知道爲什麼從這個link

DiskCacheStrategy.NONE緩存沒有使用源代碼,所討論

​​只緩存原始的全分辨率圖像。

DiskCacheStrategy.RESULT只緩存最終圖像,降低分辨率(也可能轉換)(默認行爲)

DiskCacheStrategy.ALL緩存後的圖像

嘗試的所有版本: 得到位圖從網址:

return Glide 
    .with(mContext) 
    .load(url) 
    .asBitmap() 
    .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
    .into(width, height) 
    .get(); 

對於ImageView的負荷:

 Glide 
     .with(mContext) 
     .load(url) 
     .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
     .into(imageView) // your ImageViewID here 

用於加載圖像到讓位圖後的ImageView:

Glide.with(context) 
     .load(url) 
     .asBitmap() 
     .diskCacheStrategy(DiskCacheStrategy.SOURCE) 
     .into(new SimpleTarget<Bitmap>() { 
      @Override 
      public void onResourceReady(Bitmap resource, GlideAnimation<? super Bitmap> glideAnimation) { 
       iv_image.setImageBitmap(resource); // you can store resource to some variable too if you want to update more than 1 images or try it like iv_image2.setImageBitmap(resource) 
       iv_image.requestLayout(); 
      } 
     }); 
+0

我試過了,同樣的結果DiskCacheStrategy.ALL – Minas

+0

你必須使用你的地方在加載圖像DiskCacheStrategy.SOURCE。它肯定會執行緩存。它不像你在一個地方寫,所以你會得到結果,指定在所有事件相同。 –

+0

我確實相信我,它再次加載。你試過這個代碼嗎? – Minas