Android 在列表视图中显示图像
在我的android应用程序中,我有很多ListView。对于listView的每个项目,我都有一个TextView和一个ImageView 我使用适配器显示项目,并使用AsynTask从服务器下载图像。当我向下滚动我的ListView时,图像被下载。但当我向上滚动时,已经下载的图像会再次下载 我想创建一种图像缓存,你明白我的问题吗 这是我的ListView的类型:Image+TXT:Android 在列表视图中显示图像,android,listview,android-listview,Android,Listview,Android Listview,在我的android应用程序中,我有很多ListView。对于listView的每个项目,我都有一个TextView和一个ImageView 我使用适配器显示项目,并使用AsynTask从服务器下载图像。当我向下滚动我的ListView时,图像被下载。但当我向上滚动时,已经下载的图像会再次下载 我想创建一种图像缓存,你明白我的问题吗 这是我的ListView的类型:Image+TXT: (来源:) 非常感谢 这是因为您没有缓存图像。每次滚动项目返回视图时,您都会再次转到服务器获取图像。想省点麻
(来源:)
非常感谢 这是因为您没有缓存图像。每次滚动项目返回视图时,您都会再次转到服务器获取图像。想省点麻烦吗?试试看 Android上加载图像的许多常见陷阱都得到了解决 毕加索自动: 在适配器中处理ImageView回收和下载取消。
使用最少内存的复杂图像转换。
自动内存和磁盘缓存
这是因为您没有缓存图像。每次滚动项目返回视图时,您都会再次转到服务器获取图像。想省点麻烦吗?试试看 Android上加载图像的许多常见陷阱都得到了解决 毕加索自动: 在适配器中处理ImageView回收和下载取消。
使用最少内存的复杂图像转换。
自动内存和磁盘缓存
使用户通用图像下载。 它最好的库加载远程图像和易于使用。 参考这个,, 用法: 使用下面的行创建实例并加载 图像加载器; //初始化它
displayImage(imageUri,imageView) 让用户使用通用图像下载器。 它最好的库加载远程图像和易于使用。 参考这个,, 用法: 使用下面的行创建实例并加载 图像加载器; //初始化它 displayImage(imageUri,imageView) 提供从服务器加载图像并将其设置为您的
图像视图的功能。它还提供用于缓存图像文件缓存和内存缓存的选项。检查这里的水
示例代码:
boolean memCache = false;
boolean fileCache = true;
aq.id(R.id.image1).image("http://example.com/yourImage.png", memCache, fileCache);
它还提供以下图像的回拨:
aq.id(R.id.image1).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback(){
@Override
public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status){
iv.setImageBitmap(bm);
//do something to the bitmap
iv.setColorFilter(tint, PorterDuff.Mode.SRC_ATOP);
}
});
提供从服务器加载图像并将其设置为ImageView
。它还提供用于缓存图像文件缓存和内存缓存的选项。检查这里的水
示例代码:
boolean memCache = false;
boolean fileCache = true;
aq.id(R.id.image1).image("http://example.com/yourImage.png", memCache, fileCache);
它还提供以下图像的回拨:
aq.id(R.id.image1).image(imageUrl, true, true, 0, 0, new BitmapAjaxCallback(){
@Override
public void callback(String url, ImageView iv, Bitmap bm, AjaxStatus status){
iv.setImageBitmap(bm);
//do something to the bitmap
iv.setColorFilter(tint, PorterDuff.Mode.SRC_ATOP);
}
});
SmartImageView是解决此问题的完美方案
SmartImageView是解决此问题的完美方案
我强烈建议使用库加载图像,如或
这些库将为您负责加载和缓存。我强烈建议使用库加载图像,如或
这些库将为您负责加载和缓存。对其使用延迟加载,并首先将url存储在列表视图中,然后像我在步骤4中所做的那样进行加载。其步骤如下所示:
步骤1:通过以下url下载universal image Download jar:
第2步:-将此代码放入应用程序文件:
文件cacheDir=com.nostra13.universalimageloader.utils.StorageUtils
.getCacheDirectory(此目录)
步骤3:-将此代码放入活动的onCreate()中:
私有显示图像选项
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.iclauncher) // resource or
// drawable
.showImageForEmptyUri(R.drawable.iclauncher) // resource or
// drawable
.showImageOnFail(R.drawable.iclauncher) // resource or
// drawable
.resetViewBeforeLoading(false) // default
.delayBeforeLoading(1000).cacheInMemory(true) // default
.cacheOnDisc(true) // default
.considerExifParams(true) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_INT) // default
.bitmapConfig(Bitmap.Config.ARGB_8888) // default
.displayer(new SimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
imageLoader = ImageLoader.getInstance();
步骤4:-将此代码放入适配器中
imageLoader.displayImage(alist.get(position).getThumbnails(),
holder.ivImage,选项,null);//holder.ivImage是我的图像视图,alist.get(position).getThumbnails()是我的图像url对其使用延迟加载,并首先将url存储在列表视图中,然后像我在步骤4中所做的那样进行操作。操作步骤如下所示:
步骤1:通过以下url下载universal image Download jar:
第2步:-将此代码放入应用程序文件:
文件cacheDir=com.nostra13.universalimageloader.utils.StorageUtils
.getCacheDirectory(此目录)
步骤3:-将此代码放入活动的onCreate()中:
私有显示图像选项
options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.iclauncher) // resource or
// drawable
.showImageForEmptyUri(R.drawable.iclauncher) // resource or
// drawable
.showImageOnFail(R.drawable.iclauncher) // resource or
// drawable
.resetViewBeforeLoading(false) // default
.delayBeforeLoading(1000).cacheInMemory(true) // default
.cacheOnDisc(true) // default
.considerExifParams(true) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_INT) // default
.bitmapConfig(Bitmap.Config.ARGB_8888) // default
.displayer(new SimpleBitmapDisplayer()) // default
.handler(new Handler()) // default
.build();
imageLoader = ImageLoader.getInstance();
步骤4:-将此代码放入适配器中
imageLoader.displayImage(alist.get(position).getThumbnails(),
holder.ivImage,选项,null);//holder.ivImage是我的图像视图,alist.get(position).getThumbnails()是我的图像url您可以编写自己的ImageLoader
逻辑,或者只使用已经存在了一段时间的库,这些库几乎完善了这一点。看看我现在用的是哪一个。是的,它包括LRU缓存。@tolgap hi5用于毕加索!:在我看来,D是最好的解决方案。是的,毕加索工作得很好:)谢谢:)你可以编写自己的ImageLoader
逻辑,或者只使用已经存在了一段时间的库,这些库几乎完善了这一点。看看我现在用的是哪一个。是的,它包括LRU缓存。@tolgap hi5用于毕加索!:在我看来,D是最好的解决方案。是的,毕加索的作品很好:)谢谢:)我很高兴能帮上忙!玩得开心开发你的应用:)我很高兴能帮上忙!享受开发应用程序的乐趣:)