【问题标题】:Universal Image Loader - Use same image in multiple views通用图像加载器 - 在多个视图中使用相同的图像
【发布时间】:2015-07-04 14:05:58
【问题描述】:

我正在使用通用图像加载器从后端加载图像以在列表中显示用户图像;但是,如果该图标多次显示,则通用图像加载器不会填充所有视图。

  • [用户图像 1] - 无图像
  • [用户图像 1] - 无图像
  • [用户图像 2] - 很好
  • [用户图像 2] - 无图像
  • [用户图像 3] - 很好
  • [用户图像 1] - 很好

然后在另一个屏幕上:

  • [用户图像 1] - 很好
  • [用户图像 1] - 无图像

我正在使用 cacheInMemory 和 cacheOnDisk,这似乎对其进行了改进。和以前一样,它只在其中一个视图中显示它,而不是在大多数视图中,但我需要它们全部工作。

DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
            .cacheInMemory( true )
            .cacheOnDisk( true )
            .build();

ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder( this )
            .threadPoolSize( 3 )
            .defaultDisplayImageOptions( defaultOptions )
            .build();

ImageLoader.getInstance().init( config );

我没有使用 ListView 来完成这项任务,我使用的是 ScrollView 并使用自定义布局对其进行膨胀。

private View createSmallActivity( LayoutInflater inflater, final Event activity ) {

    final View view;
    view = inflater.inflate( R.layout.activity_posted_small, null );
    ...
    // The owner's image.
    if( activity.ownerImageUrl != null ) {
        Loader.loadImage( getActivity(),
               activity.ownerImageUrl,
               R.drawable.postedactivitysmall_imageprofileempty,
               ( ImageView ) view.findViewById( R.id.profileImage ) );
    }
    return view;
}



// Loader.loadImage
// Setting the targetSize, and masking the image with a resource.
public static void loadImage( Context context, String url, int resource, ImageView view ) {
    Drawable d = context.getResources().getDrawable( resource );
    int h = d.getIntrinsicHeight();
    int w = d.getIntrinsicWidth();

    ImageSize targetSize = new ImageSize( w, h );
    ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );
}

关于如何改进通用图像加载器以确保正确填写所有视图的任何想法?

感谢您的帮助!

【问题讨论】:

  • 你能贴出Adapter类的getView函数的代码吗?
  • 我没有使用适配器,我使用的是 ScrollView 并膨胀布局。我在有关如何加载它的问题中添加了更多详细信息。同样的问题也发生在另一个屏幕上,我必须两次显示相同的图像并且不能将它放在 ScrollView 中。
  • 你能发布你的 MaskImageLoader 代码吗?

标签: android imageview universal-image-loader


【解决方案1】:

这是因为 Universal Image Loader 取消了以前使用相同 url(用作 id)的请求。为了防止这种行为,更换

ImageLoader.getInstance().loadImage( url, targetSize, new MaskImageLoader( context, view, resource ) );

通过

ImageLoader.getInstance().displayImage(url, 
    new NonViewAware(new ImageSize(w, h), ViewScaleType.CROP),
    new MaskImageLoader(context, view, resource));

【讨论】:

    【解决方案2】:

    我建议你使用 ListView。也许您应该全局声明 ImageLoader。然后使用它。

    ImageLoader imageLoader = ImageLoader.getInstance();
    ...
    imageLoader.displayImage(imageUri, imageView);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多