我有一个需要加载缩略图的要求,以及一个由Text
自ListView
定义设置的Adapter
. 缩略图应该存储在缓存中,因为我使用的是通用图像加载器,但是我对它的实现以及如何根据我的要求使用它来ListView
从URL
. 请建议我一些实施良好的方法。
5 回答
将下面的代码行写入适配器的 getView() 方法,这里 imageUrls[position] 是 Image Urls 的数组, holder.image 是 imageview。
imageLoader.displayImage(imageUrls[position], holder.image, null);
并将下面的代码行写入您的适配器构造函数。
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
它将解决您的问题,如果您对此有任何疑问,请告诉我。
有关通用图像加载器示例的完整源代码,请参见下面的链接。
在适配器的 oncreate() 中定义
ImageLoader imageLoader=new ImageLoader(activity.getApplicationContext());
并在 getView() 方法中使用它:
imageLoader.DisplayImage(//your image url, //your imageView);
我会建议你使用 AQuery - (Android-Query) - 一个用于 Android 的超级简单的 UI 操作框架。
AQuery 以库的形式出现,您需要将其包含在构建路径中。
在 AQuery 中,您可以使用以下几行下载、显示(带有效果)和缓存图像(在内存和磁盘中):
AQuery aq = new AQuery(yourActivity.this);
boolean memCache = true;
boolean fileCache = true;
aq.id(R.id.image1).image("http://www.example.com/image.jpg", memCache, fileCache);
AQuery 将处理所有数据下载过程,并将在您提供的 ImageView 上显示图像。加载图像后,将根据布尔参数memCache
和fileCache
. 下一次,它将从内存缓存或文件缓存中加载图像。
有关更多信息和示例,您应该访问http://code.google.com/p/android-query/上的 AQuery 项目
有关图像加载的更多代码 - http://code.google.com/p/android-query/wiki/ImageLoading
这将帮助您使用通用图像加载器加载 imageurl 它会给 imageurl 的状态是开始加载、已完成或失败,并且请求是取消状态也提供。我希望它可以帮助你..
public void ImageLoaderListener(String url){
imageLoader.loadImage(url,new ImageLoadingListener(){
@Override
public void onLoadingStarted(String imageUri, View view) {
Log.e("tag", "onLoadingStarted");
}
@Override
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {
Log.e("tag", "onLoadingFailed");
}
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
Log.e("tag", "onLoadingComplete");
imageView.setImageBitmap(loadedImage);
}
@Override
public void onLoadingCancelled(String imageUri, View view) {
Log.e("tag", "onLoadingCancelled");
}
});
}
如果您想缓存图像,请在下面添加此功能...但是要在创建时启动,因为它非常高...
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
.defaultDisplayImageOptions(DisplayImageOptions.createSimple())
.build();
imageLoader = ImageLoader.getInstance();
if (!imageLoader.isInited()) {
imageLoader.init(config);
}
defaultOptions = new DisplayImageOptions.Builder()
.cacheInMemory(true)
.cacheOnDisc(true)
.build();
然后您将添加该 ImageLoadingListener() 函数...
public void ImageLoaderListener(String url){
imageLoader.loadImage(url, defaultOptions, new ImageLoadingListener() {
public class CategoryModel
{
String CatId;
String CatName;
String Image;
String Price;
Bitmap ImgSrc;
CategoryAdapter Ma;
public CategoryModel()
{
}
public CategoryModel(String catid,String catname,String image,String price)
{
this.CatId = catid;
this.CatName = catname;
this.Image = image;
this.Price = price;
}
public CategoryModel(String catname,String image,String price)
{
this.CatName = catname;
this.Image = image;
this.Price = price;
}
public void setCatId(String catid)
{
this.CatId =catid;
}
public String getCatId()
{
return this.CatId;
}
public void setCatName(String catname)
{
this.CatName=catname;
}
public String getCatName()
{
return this.CatName;
}
public void setImage(String image)
{
this.Image=image;
}
public String getImage()
{
return this.Image;
}
public void setPrice(String price)
{
this.Price=price;
}
public String getPrice()
{
return this.Price;
}
public Bitmap getImagesrc()
{
return this.ImgSrc;
}
public void setAdapter(CategoryAdapter adf)
{
this.Ma = adf;
}
public CategoryAdapter getAdapter()
{
return this.Ma;
}
public void LoadImage(CategoryAdapter adap)
{
this.Ma = adap;
if(Image != null && !Image.equals(""))
{
new ImageLoader().execute(new String[]{ Image });
}
}
public static Bitmap getBitmapUrl(String src)
{
try
{
URL url = new URL(src);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap mybitmap = BitmapFactory.decodeStream(input);
connection.disconnect();
return mybitmap;
}
catch (Exception e) {
return null;
}
}
private class ImageLoader extends AsyncTask<String, String, Bitmap>
{
@Override
protected void onPreExecute()
{
}
@Override
protected Bitmap doInBackground(String... params) {
try
{
Bitmap b = getBitmapUrl(params[0]);
return b;
}
catch (Exception e)
{
Log.e("Excep", e.toString());
return null;
}
}
@Override
protected void onPostExecute(Bitmap res)
{
if(res!=null)
{
ImgSrc = res;
if(Ma!=null)
{
Ma.notifyDataSetChanged();
}
}
else
{
Log.e("Error", "Image not Loading");
}
}
}
}