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

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:orientation="vertical" >
  6.  
  7. <com.android.volley.toolbox.NetworkImageView
  8. android:id="@+id/userimage"
  9. android:layout_width="100dp"
  10. android:layout_height="100dp" />
  11.  
  12. </LinearLayout>

2.新建图片缓存类 BitmapCache

  1. import android.graphics.Bitmap;
  2. import android.support.v4.util.LruCache;
  3.  
  4. import com.android.volley.toolbox.ImageLoader.ImageCache;
  5.  
  6. public class BitmapCache implements ImageCache {
  7. private LruCache<String, Bitmap> mCache;
  8.  
  9. public BitmapCache() {
  10. int maxSize = 4 * 1024 * 1024;
  11. mCache = new LruCache<String, Bitmap>(maxSize) {
  12. @Override
  13. protected int sizeOf(String key, Bitmap bitmap) {
  14. // return bitmap.getByteCount(); // >api12 才能用
  15. return bitmap.getRowBytes() * bitmap.getHeight();
  16. }
  17. };
  18. }
  19.  
  20. @Override
  21. public Bitmap getBitmap(String url) {
  22. return mCache.get(url);
  23. }
  24.  
  25. @Override
  26. public void putBitmap(String url, Bitmap bitmap) {
  27. if (bitmap != null) {
  28. mCache.put(url, bitmap);
  29. }
  30. }
  31. }

3.adapater代码

  1. import android.content.Context;
  2. import android.view.LayoutInflater;
  3. import android.view.View;
  4. import android.view.ViewGroup;
  5. import android.widget.BaseAdapter;
  6.  
  7. import com.android.volley.RequestQueue;
  8. import com.android.volley.toolbox.ImageLoader;
  9. import com.android.volley.toolbox.NetworkImageView;
  10. import com.android.volley.toolbox.Volley;
  11.  
  12. public class MyAdapter extends BaseAdapter {
  13. private String[] list;
  14. private Context context;
  15. private RequestQueue queue;
  16. private ImageLoader imageLoader;
  17.  
  18. public MyAdapter(Context context, String[] list) {
  19. this.context = context;
  20. this.list = list;
  21. queue = Volley.newRequestQueue(context);
  22. imageLoader = new ImageLoader(queue, new BitmapCache());
  23. }
  24.  
  25. @Override
  26. public int getCount() {
  27. return list.length;
  28. }
  29.  
  30. @Override
  31. public Object getItem(int position) {
  32. return list[position];
  33. }
  34.  
  35. @Override
  36. public long getItemId(int position) {
  37. return position;
  38. }
  39.  
  40. @Override
  41. public View getView(int position, View convertView, ViewGroup parent) {
  42. ViewHolder holder = null;
  43.  
  44. if (convertView == null) {
  45. holder = new ViewHolder();
  46. convertView = LayoutInflater.from(context).inflate(R.layout.list_item, null);
  47. holder.img = (NetworkImageView) convertView.findViewById(R.id.userimage);
  48.  
  49. convertView.setTag(holder);
  50. } else {
  51. holder = (ViewHolder) convertView.getTag();
  52. }
  53.  
  54. final String imgUrl = list[position];
  55.  
  56. if (imgUrl != null && !imgUrl.equals("")) {
  57. holder.img.setDefaultImageResId(R.drawable.ic_launcher);
  58. holder.img.setErrorImageResId(R.drawable.ic_launcher);
  59. holder.img.setImageUrl(imgUrl, imageLoader);
  60. }
  61.  
  62. return convertView;
  63. }
  64.  
  65. class ViewHolder {
  66. NetworkImageView img;
  67. }
  68. }

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. CSS的class、id、css文件名的常用命名规则

    CSS的class.id.css文件名的常用命名规则        (一)常用的CSS命名规则 头:header       内容:content/container       尾:footer   ...

  2. android-GridView控件的使用

    GridView 按行列方式显示多个组件(二维布局界面) 数据源(集合)-适配器(SimpleAdapter)-视图界面(GridView),加载适配器-配置监听器(OnItemClickListen ...

  3. typeof操作符在javascript中运用时时页面上的操作数显示

    typeof可以告诉我们它的操作数是一个字符串(string).数值(number).函数(function).布尔值(boolean)或对象(object). 1.字符串(string) alert ...

  4. 无法在提交表单前通过ajax验证解决办法

    博主在一个小项目中,要实现注册表单无刷新验证用户名或密码,但是发现不管怎么样都无法在先通过ajax验证之前不提交表单. 例如:一个简单的验证函数 function check(){ $.post(&q ...

  5. win10我能ping通他人,但他人ping不同我

    这是防火墙的原因,关闭防火墙即可

  6. ckeditor简单的演示

    先把ckeditor文件添加到项目中 然后在页面上引用 <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml& ...

  7. spring security使用数据库资源

    国内对权限系统的基本要求是将用户权限和被保护资源都放在数据库里进行管理,在这点上Spring Security并没有给出官方的解决方案,为此我们需要对Spring Security进行扩展.. 数据库 ...

  8. JSTL 核心标签库 使用(C标签)

    JSTL 核心标签库标签共有13个,功能上分为4类: 1.表达式控制标签:out.set.remove.catch 2.流程控制标签:if.choose.when.otherwise 3.循环标签:f ...

  9. html 抽奖代码

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  10. mysql语句中有引号的问题解决方案

    在mysql的查询.修改.插入.删除的sql语句里有引号如何处理? 例如: <? $name = "my name is xcxc"; $people = "i'm ...