在android上加载图片但速度慢

时间:2014-06-09 07:22:11

标签: android listview download

我想在listview上加载图片,我可以从网址下载图片并在listview上显示,但速度非常慢。 如何提高加载速度? 请帮我。 我使用此代码从url下载图像:

ImageService类:

 InputStream input = null;
     Bitmap bitmap = null;
     try {
         URL url = new URL(src);
         // We open the connection
         URLConnection conection = url.openConnection();

         conection.connect();
         input = new BufferedInputStream(url.openStream(), 8192);
         // we convert the inputStream into bitmap
       bitmap = BitmapFactory.decodeStream(input);
       input.close();
       Log.e("ERROR:","OOOOOOOOOK");
     } catch (Exception e) {
          Log.e("eRROR:", e.getMessage());

       }
       return bitmap;

}

用于客户列表视图的ProductAdapter类:

    private LayoutInflater mInflater;

private List items = new ArrayList();

public ProductAdapter(Context context, List items) {
    mInflater = LayoutInflater.from(context);
    this.items = items;
}

public int getCount() {
    return items.size();
}

public Product getItem(int position) {
    return (Product) items.get(position);
}

public long getItemId(int position) {
    return position;
}

public View getView(int position, View convertView, ViewGroup parent) {
    ViewHolder holder;
    Product s = (Product) items.get(position);
    if (convertView == null) {

        convertView = mInflater.inflate(R.layout.row_layout, null);
        holder = new ViewHolder();
        holder.name = (TextView) convertView.findViewById(R.id.name);
        holder.pic = (ImageView) convertView.findViewById(R.id.image);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.name.setText(s.getName());
    if (s.getImage() != null) {
        holder.pic.setImageBitmap(s.getImage());
    } else {

        holder.pic.setImageResource(R.drawable.ic_launcher);
    }
    return convertView;
}

static class ViewHolder {
    TextView name;

    ImageView pic;
}

6 个答案:

答案 0 :(得分:1)

使用这些库,它非常简单:D

这个库:

picasso

Volley image loader

ImageView mImageView = (ImageView)findViewById(R.id.image_view);
Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(mImageView);

答案 1 :(得分:0)

我可以推荐一种不同于魅力的方式:Android查询。

您可以从here

下载该JAR文件

AQuery androidAQuery = new AQuery(this);

举个例子:

androidAQuery.id(YOUR IMAGEVIEW).image(YOUR IMAGE TO LOAD, true, true, getDeviceWidth(), ANY DEFAULT IMAGE YOU WANT TO SHOW);

它非常快速和准确,使用它你可以找到更多的功能,如加载时的动画,获取位图(如果需要)等。

答案 2 :(得分:0)

@ Nima.S-H

通过更多选项

查看此库非常有用
  

https://github.com/nostra13/Android-Universal-Image-Loader

答案 3 :(得分:0)

您必须使用lib来显示图像。使用以下lib: -

  1. https://github.com/koush/UrlImageViewHelper
  2. https://github.com/nostra13/Android-Universal-Image-Loader
  3. 了解更多信息,请参阅以下链接: -

    Lazy load of images in ListView

答案 4 :(得分:0)

我建议您使用LruCache,它可以大大提高ListViews中加载图像的性能 Caching Bitmaps

Here显示差异的一个例子。

答案 5 :(得分:0)

我将推荐用于加载图像的picasso库,以便使用OkHttp进行快速网络通信。在这里你可以找到这个例子。 https://github.com/AnawazInc/OkHttp-Picasso-Example-Android