2

我正在使用 nostra 的通用图像加载器https://github.com/nostra13/Android-Universal-Image-Loader

我遇到了 displayImage() 的问题。发生以下情况:

“我调用 imageView.displayImage() 并且图像未加载(它在线程中运行)然后我现在第二次调用 imageView.displayImage() 因为第二个图像较小第二个图像显示在 imageView 但经过几次秒第一张图片替换第二张图片。”

如何避免第二张图片被前一张图片替换?有什么选项可以设置吗?

4

3 回答 3

3

在 imageLoader.loadImage() 的 onLoadingComplete() 回调中,我们获取 imageUri 作为参数,如果相同,则使用当前的 imageUrl 检查它,然后在 imageView 中设置图像。注意当前的 imageUrl 应该是成员变量而不是最终变量

于 2013-03-20T05:18:03.823 回答
1

我希望以下代码可以对您有所帮助

private void LoadBackground(){
    ParseFile f = messageObject.getParseFile("image");
    voiceFile = messageObject.getParseFile("");
    if( f == null) return;
    String fpath = f.getUrl().toString();
    if(f.getUrl() == null) return;
    if (!fpath.equalsIgnoreCase("")) {
        if (!fpath.startsWith("http://") && !fpath.startsWith("https://")) {
            Log.d("refreshProfile",fpath);
            File imgFile = new File(fpath);
            Bitmap bitmap = BitmapFactory.decodeFile(imgFile.getAbsolutePath());
            if (bitmap != null) {
                imgBg.setImageBitmap(bitmap);
            }
        } else {
            ImageLoader.getInstance().displayImage(fpath, imgBg,
                DisplayImageOption.getDisplayImage(),
                new AnimateFirstDisplayListener(){
                    @Override
                    public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
                        pbLoading.setVisibility(View.GONE);
                    }
                });
        }
    }
}

以下是监听器的代码

public class AnimateFirstDisplayListener extends SimpleImageLoadingListener {

  public static final List<String> displayedImages = Collections.synchronizedList(new LinkedList<String>());

     @Override
     public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
       if (loadedImage != null) {
           ImageView imageView = (ImageView) view;
           boolean firstDisplay = !displayedImages.contains(imageUri);
           if (firstDisplay) {
               FadeInBitmapDisplayer.animate(imageView, 500);
               displayedImages.add(imageUri);
           }
       }
   }
}

显示图像选项.java

public class DisplayImageOption {

   public static DisplayImageOptions getDisplayImage() {

       DisplayImageOptions options = new DisplayImageOptions.Builder()
       .showImageOnLoading(R.drawable.background)
       .showImageForEmptyUri(R.drawable.background)
       .showImageOnFail(R.drawable.background)
       .cacheInMemory(true)
       .cacheOnDisk(true)
       .considerExifParams(true)
       .build();
       return options;

   }

   public static DisplayImageOptions getDisplayRoundedImage() {

       DisplayImageOptions options = new DisplayImageOptions.Builder()
       .showImageOnLoading(R.drawable.ic_launcher)
       .showImageForEmptyUri(R.drawable.ic_launcher)
       .showImageOnFail(R.drawable.ic_launcher)
       .cacheInMemory(true)
       .cacheOnDisk(true)
       .considerExifParams(true)
       .displayer(new RoundedBitmapDisplayer(100))
       .build();

       return options;

   }
}
于 2016-02-17T20:26:24.467 回答
0

也许你可以像下面的代码一样:

new DisplayImageOptions.Builder()
        .showImageForEmptyUri(R.drawable.default_avatar_female)
        .showImageOnFail(R.drawable.default_avatar_female)
        .showImageOnLoading(R.drawable.default_avatar_female).build();

通过 showImageOnLoading。

于 2016-05-19T13:01:21.860 回答