1.listview 中的条目要用 Volley 中的 NetworkImageView,如果直接用ImageView也可以,但是要在getView方法中使用url地址设置为imageView的tag标记

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" > <com.android.volley.toolbox.NetworkImageView
android:id="@+id/userimage"
android:layout_width="100dp"
android:layout_height="100dp" /> </LinearLayout>

2.新建图片缓存类 BitmapCache

import android.graphics.Bitmap;
import android.support.v4.util.LruCache; import com.android.volley.toolbox.ImageLoader.ImageCache; public class BitmapCache implements ImageCache {
private LruCache<String, Bitmap> mCache; public BitmapCache() {
int maxSize = 4 * 1024 * 1024;
mCache = new LruCache<String, Bitmap>(maxSize) {
@Override
protected int sizeOf(String key, Bitmap bitmap) {
// return bitmap.getByteCount(); // >api12 才能用
return bitmap.getRowBytes() * bitmap.getHeight();
}
};
} @Override
public Bitmap getBitmap(String url) {
return mCache.get(url);
} @Override
public void putBitmap(String url, Bitmap bitmap) {
if (bitmap != null) {
mCache.put(url, bitmap);
}
}
}

3.adapater代码

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter; import com.android.volley.RequestQueue;
import com.android.volley.toolbox.ImageLoader;
import com.android.volley.toolbox.NetworkImageView;
import com.android.volley.toolbox.Volley; public class MyAdapter extends BaseAdapter {
private String[] list;
private Context context;
private RequestQueue queue;
private ImageLoader imageLoader; public MyAdapter(Context context, String[] list) {
this.context = context;
this.list = list;
queue = Volley.newRequestQueue(context);
imageLoader = new ImageLoader(queue, new BitmapCache());
} @Override
public int getCount() {
return list.length;
} @Override
public Object getItem(int position) {
return list[position];
} @Override
public long getItemId(int position) {
return position;
} @Override
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = null; if (convertView == null) {
holder = new ViewHolder();
convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);
holder.img = (NetworkImageView) convertView.findViewById(R.id.userimage); convertView.setTag(holder);
} else {
holder = (ViewHolder) convertView.getTag();
} final String imgUrl = list[position]; if (imgUrl != null && !imgUrl.equals("")) {
holder.img.setDefaultImageResId(R.drawable.ic_launcher);
holder.img.setErrorImageResId(R.drawable.ic_launcher);
holder.img.setImageUrl(imgUrl, imageLoader);
} return convertView;
} class ViewHolder {
NetworkImageView img;
}
}

Android之使用Volley框架在ListView中加载大量图片的更多相关文章

  1. ListView中加载大量的图片

    情况是这样的:我需要把大约四五十个车标在一个listView中展示出来,一般在用ListView的时候撑死十来个图标,按不同分类使用,这倒好办,在创建view的时候使用R.drawable.xxx指定 ...

  2. Android开发利用Volley框架下载和缓存网络图片

    2013年Google I/O大会上推出了一种新的网络通信框架——Volley,Volley可是说是把AsyncHttpClient和Universal-Image-Loader的优点集于了一身,既可 ...

  3. Android中ListView动态加载数据

    1. 引言: 为了提高ListView的效率和应用程序的性能,在Android应用程序中不应该一次性加载ListView所要显示的全部信息,而是采取分批加载策略,随着用户的滑动,动态的从后台加载所需的 ...

  4. Android中ListView异步加载图片错位、重复、闪烁问题分析及解决方案

    我们在使用ListView异步加载图片的时候,在快速滑动或者网络不好的情况下,会出现图片错位.重复.闪烁等问题,其实这些问题总结起来就是一个问题,我们需要对这些问题进行ListView的优化. 比如L ...

  5. Android中ListView分页加载数据

    public class MainActivity extends Activity { private ListView listView=null; //listview的数据填充器 privat ...

  6. android listview 异步加载图片并防止错位

    网上找了一张图, listview 异步加载图片之所以错位的根本原因是重用了 convertView 且有异步操作. 如果不重用 convertView 不会出现错位现象, 重用 convertVie ...

  7. android优化从网络中加载图片速度。。

    从网络中加载图片主要要注意两个方面的问题: 1.内存管理:图片占的内存很大,假如图片数量多,很容易让系统抛出out of memory的异常. 同时我们也要注意不同android版本中内存管理的区别. ...

  8. 实现Android ListView 自动加载更多内容

    研究了几个小时终于实现了Android ListView 自动加载的效果. 说说我是怎样实现的.分享给大家. 1.给ListView增加一个FooterView,调用addFooterView(foo ...

  9. wemall app商城源码Android之ListView异步加载网络图片(优化缓存机制)

    wemall-mobile是基于WeMall的android app商城,只需要在原商城目录下上传接口文件即可完成服务端的配置,客户端可定制修改.本文分享wemall app商城源码Android之L ...

随机推荐

  1. ADO.NET测试题

    第一部分: 新建一个数据库:ADO测试,包含下面两个数据表,使用代码创建,并保留创建的代码文本. 学生表Student: 编号(Code):nvarchar类型,不能为空,主键 姓名(Name):nv ...

  2. intellij idea 插件 ideaVim

    像Eclipse一样,idea这个公认最好的javaIDE也有Vim插件. 安装方法 File>Settings>Plugins>Install JetBrains plugin.. ...

  3. min-height

    1.min-height min-height:160px;height:auto!important;height:160px; min-height:160px; 设置对象box的最小高度,Fir ...

  4. 模拟实现ORM实例

    https://git.oschina.net/wenjieyatou/hibernate_OR_Mapping 请参考git代码.基本原理是自己写了一个session,然后用反射机制模拟数据库存储机 ...

  5. iOS Core Animation

    1.什么是Core Animation? 它是一套包含图形绘制,投影,动画的OC类集合.它就是一个framework.通过CoreAnimation提供的接口,你可以方便完成自己所想要的动画. 2.我 ...

  6. SSH框架中新建立实体类后的配置

    strut 层 public class Sellauthentication extends ActionSupport {    private SellauthenticationService ...

  7. Mysql 性能调优之Memory 计算

    最近在做mariadb 数据库性能调优时发现,配置文件影响着整个数据库的性能的百分之80(这么说不为过),现在就我出现的问题来分析. 在压测mariadb时,tail 日志.发现压测到一半 ,数据库会 ...

  8. Kmeans方法

    基本Kmeans算法介绍及其实现 http://blog.csdn.net/qll125596718/article/details/8243404/ kmeans++ http://www.52ml ...

  9. The Earth Mover's Distance

    The EMD is based on the minimal cost that must be paid to transform one distribution into the other. ...

  10. ServletContext读取Web应用中的资源文件

    package cn.itcast; import java.io.FileInputStream; import java.io.IOException; import java.io.InputS ...