2015-10-20 51 views
0

我有一个ListView和一个从API加载各种数据的适配器。其中一个数据是在线图像的URL。我下载图像并将其设置在适配器中的ImageView中。在ListView中缓存下载的图像

问题是,当我在ListView中上下滚动时,图像被重新下载,并且在这样做时存在明显的滞后。此外,在瞬间,它错误地显示错误的图像。

我需要以某种方式缓存这些图像只下载一次,并在该ListView中正确设置它们 - 我该怎么做?

编辑: 我使用通用的图像加载器加载我的图片是这样的:

ImageLoader imageLoader = ImageLoader.getInstance(); 
imageLoader.displayImage(imageUrl, viewHolder.thumbnailImageView); 

但它似乎并没有对它们进行缓存......我必须做些什么额外的?

+0

使用图像库,如壁画加载和缓存画面,供各位 – Breavyn

回答

1

使用ImageLoaders

Glide

ImageView的ImageView的=(ImageView的)findViewById(R.id.my_image_view);

Glide.with(this).load("http://goo.gl/gEgYUd").into(imageView); 

简单图像加载。检查您可以与听众一起使用它们的链接。

你还可以尝试:

picasso

Android-Universal-Image-Loader

编辑:作为OP说,他使用UIL。

]您应该使用图像感知。 你可以拥有自己的高缓存内存配置。

public void initializeImageLoader(final Context sContext) { 
     final ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(sContext) 
       .memoryCacheExtraOptions(480, 800) // default = device screen dimensions 
       .taskExecutor(AsyncTask.THREAD_POOL_EXECUTOR) 
       .taskExecutorForCachedImages(AsyncTask.THREAD_POOL_EXECUTOR) 
       .threadPoolSize(3) // default 
       .threadPriority(Thread.NORM_PRIORITY - 1) // default 
       .tasksProcessingOrder(QueueProcessingType.FIFO) // default 
       .denyCacheImageMultipleSizesInMemory() 
       .memoryCache(new UsingFreqLimitedMemoryCache(50 * 1024 * 1024)) // default 
       .memoryCacheSize(50 * 1024 * 1024) 
       .imageDownloader(new BaseImageDownloader(sContext)) // default 
       .defaultDisplayImageOptions(DisplayImageOptions.createSimple()) // default 
       .build(); 
     ImageLoader.getInstance().init(config); 
    } 

在获取实例之前使用此初始化。

initializeImageLoader(context); ImageLoader imageLoader = ImageLoader.getInstance();

设置装载机的选项。

final DisplayImageOptions options = new DisplayImageOptions.Builder() 
       .showImageOnLoading(R.drawable.loading) 
       .showImageForEmptyUri(R.drawable.noimage) 
       .showImageOnFail(R.drawable.noimage) 
       .resetViewBeforeLoading(false) //default 
       .bitmapConfig(Bitmap.Config.RGB_565) 
       .cacheInMemory(true) 
       .cacheOnDisk(false) //default 
       .build(); 

并将其设置为您的装载机:

final ImageAware imageAware = new ImageViewAware(viewHolder.thumbnailImageView, false); 
imageLoader.displayImage(imageUrl, imageAware, options); 
+0

我用的是通用的图像加载器加载我的图像,但它不似乎缓存他们......我该怎么做..? – Micro

+1

发布代码。 – Dhina