2013-08-20 111 views
2

我正在嘗試使用UIL加載低分辨率圖像,然後在準備就緒時加載高分辨率版本。我遇到的問題是隻有第一次調用imageView.setImageBitmap(bitmap);正在執行。高分辨率圖像永遠不會放入圖像視圖中。通用圖像加載器 - 如何將第二個圖像加載到ImageView中?

我正在使用1.8.6版本,似乎後來的請求正在被對engine.cancelDisplayTaskFor(imageView)的調用取消;在DisplayBitmapTask中。我的代碼有什麼問題?我如何避免取消後續的displayImage()請求?

public static DisplayImageOptions.Builder getDefaultDisplayImageOptions() { 
    return new DisplayImageOptions.Builder() 
      .imageScaleType(ImageScaleType.EXACTLY) 
      .bitmapConfig(Bitmap.Config.RGB_565) // Will be overridden by decodingOptions() 
      .cacheInMemory(true) 
      .cacheOnDisc(true) 
      .displayer(new SimpleBitmapDisplayer()); // default 
} 

public static void displayImageWithPlaceholder(final ImageView imageView, final String imageUrl, final String previewImageUrl) { 
    DisplayImageOptions.Builder builder = getDefaultDisplayImageOptions(); 
    DisplayImageOptions displayImageOptions = builder.displayer(new SimpleBitmapDisplayer2()).build(); 

    ImageLoader.getInstance().displayImage(
      previewImageUrl, 
      imageView, 
      displayImageOptions, 
      new SimpleImageLoadingListener() { 

       @Override 
       public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) { 
        // Turn off cache in memory for this call getting the larger images. 
        // It will still be cached on disk if possible. 
        DisplayImageOptions.Builder builder = getDefaultDisplayImageOptions(); 
        DisplayImageOptions displayImageOptions = builder.cacheInMemory(false).displayer(new SimpleBitmapDisplayer2()).build(); 
        ImageLoader.getInstance().displayImage(imageUrl, imageView, displayImageOptions, new SimpleImageLoadingListener() {}); 
       } 
      } 
    ); 
} 

private static class SimpleBitmapDisplayer2 implements BitmapDisplayer { 
    @Override 
    public Bitmap display(Bitmap bitmap, ImageView imageView, LoadedFrom loadedFrom) { 
     imageView.setImageBitmap(bitmap); 
     return bitmap; 
    } 
} 
+0

'SimpleBitmapDisplayer'和'SimpleBitmapDisplayer2'是完全一樣的。 – NOSTRA

回答

1

此時UIL的邏輯被下列:在第一回調onLoadingComplete(...)被執行,則任務爲當前Imageview標記爲取消。所以你的第二個任務是全尺寸的圖像被取消。

只有更改UIL的來源才能解決此問題。將它們複製到您的項目或添加UIL:項目作爲Android庫依賴項。 然後在DisplayBitmapTask類中交換兩行74和75。即 更換

listener.onLoadingComplete(imageUri, imageView, displayedBitmap); 
engine.cancelDisplayTaskFor(imageView); 

engine.cancelDisplayTaskFor(imageView); 
listener.onLoadingComplete(imageUri, imageView, displayedBitmap); 
+0

是否有計劃將此包含在官方源代碼中? –

+0

我認爲它可以在下一個版本。讓我想想。 – NOSTRA

相關問題