在listview中使用通用图像加载器加载图像一次

时间:2014-09-19 14:33:49

标签: android listview universal-image-loader

我有一个列表视图,我想在其中显示视频缩略图,但每次我再次滚动图像下载。我该如何下载图像并显示它。 这是我的代码:

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder = null;
    if(convertView == null){
        rootView = mInflater.inflate(R.layout.adapter_video, parent, false);
        holder = new ViewHolder();
        holder.ivThumbnail = (ImageView) rootView.findViewById(R.id.ivThumbnailVideoAdapter);
        rootView.setTag(holder);
    }
    else{
        rootView = convertView;
        holder = (ViewHolder)rootView.getTag();
    }
    imageLoader.displayImage(update.get(position).getThumbnail(), holder.ivThumbnail, option);
    return rootView;
}

1 个答案:

答案 0 :(得分:1)

使用UIL,图像下载配置为 DisplayImageOptions

例如:

mOptionsSimple = new DisplayImageOptions.Builder().resetViewBeforeLoading(true)
                                                                .cacheOnDisc(true)
                                                                .imageScaleType(ImageScaleType.IN_SAMPLE_INT)
                                                                .bitmapConfig(Bitmap.Config.RGB_565)
                                                                .build();

这里,cacheOnDisc为true将图像保存在磁盘上,而不是缓存中。当您滚动图像时会重新加载,当然因为在listview中单元格被回收。但是使用此选项,如果已经下载了它,它将从磁盘重新加载

你也可以/或启用memoryCache但要小心这个。如果图像不是托管的,则可能是OutOfMemoryException的原因

ImageLoaderConfiguration 这是一个例子:

    config = new ImageLoaderConfiguration.Builder(getApplicationContext()).threadPoolSize(3)
                                                            .threadPriority(Thread.NORM_PRIORITY - 1)
                                                            .tasksProcessingOrder(QueueProcessingType.FIFO)
                                                            .imageDownloader(new MyImageDownloader(mContext))
                                                            .imageDecoder(new BaseImageDecoder(false))
                                                            .discCache(new UnlimitedDiscCache(cacheDir))
                                                            .discCacheFileNameGenerator(new HashCodeFileNameGenerator())
                                                            .defaultDisplayImageOptions(mOptionsSimple)
                                                            .writeDebugLogs()
                                                            .build();

在最后一个示例中,discCache不受限制,如果您认为它会在磁盘上占用太多空间,则可以更改