转载本专栏每一篇博客请注明转载出处地址,尊重原创。此博客转载链接地址:小杨的博客    http://blog.csdn.net/qq_32059827/article/details/52791311

本博客是所用vooley框架完成的一个小案例,如果想详细学习该框架的使用。可以关注本人专栏《Android进阶》下的volley框架详解使用。

好了,看到这里说明,你对该框架使用应该算是入门了,那就开始实战之旅吧!

首先,定义一个布局,只用一个ListView就好了了。

然后,自定义一个adapter适配器

package com.leslie.volleylistviewdemo;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 MyImageCache());}@Overridepublic int getCount() {return list.length;}@Overridepublic Object getItem(int position) {return list[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic 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;}
}

适配器没什么可说的,主要是在item加载、item数据设置的时候。不再使用ImageView,而是使用了NetworkImageView

item的布局如下:

<?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.NetworkImageViewandroid:id="@+id/userimage"android:layout_width="100dp"android:layout_height="100dp" /></LinearLayout>

然后就是它的使用,如果您看过《Android进阶专栏》的volley使用,相信这已经很明了了。

在使用NetworkImageView的时候,需要传入自定义的缓存类对象LruCache:

package com.leslie.volleylistviewdemo;import android.annotation.SuppressLint;
import android.graphics.Bitmap;
import android.support.v4.util.LruCache;import com.android.volley.toolbox.ImageLoader.ImageCache;/*** 自定义一个内存缓存,基于的LRU算法的内存缓存* @author Administrator**/
@SuppressLint("NewApi") public class MyImageCache implements ImageCache {LruCache<String, Bitmap> caches;//1.定义缓存的空间大小int maxSize = 4 * 1024 * 1024;//单位是byte-->4194304byte//  int maxSize = 4;//单位是m-->4M//缓存的最大值 4m 4*1024*1024kb ,是空间大小.不是元素个数public MyImageCache() {caches = new LruCache<String, Bitmap>(maxSize) {//2.重载sizeOf@Overrideprotected int sizeOf(String key, Bitmap value) {// TODO//返回bitmap这个entry的大小,统一计算单位//              return value.getByteCount() / 1024 / 1024;//一张图片,占了多少Mreturn value.getByteCount();//一张图片,占了多少bytes}};}/*** 从缓存里面取图片*/@Overridepublic Bitmap getBitmap(String url) {System.out.println("--------------从缓存中加载--------------");return caches.get(url);}/*** 放到缓存里面去*/@Overridepublic void putBitmap(String url, Bitmap bitmap) {System.out.println("--------------放置到缓存--------------");caches.put(url, bitmap);}}

加载图片和移除缓存图片的时候,我加入了Log。待会再看打印怎么输出的。

最后,看看MainActivity代码:

package com.leslie.volleylistviewdemo;import android.app.Activity;
import android.os.Bundle;
import android.widget.ListView;public class MainActivity extends Activity {ListView listView;String[] images = new String[] { "http://192.168.1.100:8080/img/b7003af33a87e950bc07153d12385343fbf2b44b.jpg","http://192.168.1.100:8080/img/b7fd5266d01609244a0c6b55d50735fae6cd3457.jpg","http://192.168.1.100:8080/img/b86afbbf9f78ae5dddfaa4c72c3afe81.jpg","http://192.168.1.100:8080/img/b89230d85178eafa7513a8601ba01d6e.jpg","http://192.168.1.100:8080/img/bba1cd11728b4710fc4148cbc1cec3fdfc03234e.jpg","http://192.168.1.100:8080/img/bigimg.jpg","http://192.168.1.100:8080/img/c0a11a6489b8f14e1f02d0be7afc0cad(1).jpg","http://192.168.1.100:8080/img/c0a11a6489b8f14e1f02d0be7afc0cad.jpg","http://192.168.1.100:8080/img/c8529ee742fa8abb853b297fef5ad772.jpg","http://192.168.1.100:8080/img/c8a9338d3020ea03d66aca22c34cef3f.jpg","http://192.168.1.100:8080/img/c9fcc3cec3fdfc03da9554bfd63f8794a5c226c3.jpg","http://192.168.1.100:8080/img/ca1349540923dd54489f106fd309b3de9d8248cc.jpg","http://192.168.1.100:8080/img/cbdee99ceabdfc7c76a78803c06d3b5b.jpg","http://192.168.1.100:8080/img/cdbbf5d62e08e4466fdbd526031145ee.jpg","http://192.168.1.100:8080/img/ce9dfc60b7002d583ffd3277def6dec7.jpg","http://192.168.1.100:8080/img/d01373f082025aafa359acd3f9edab64034f1aba.jpg","http://192.168.1.100:8080/img/d043ad4bd11373f02e541a9ea60f4bfbfbed0443.jpg","http://192.168.1.100:8080/img/d1160924ab18972b8bd74acde4cd7b899f510ac3.jpg","http://192.168.1.100:8080/img/d439b6003af33a8760a4e74bc45c10385243b592.jpg","http://192.168.1.100:8080/img/d6680a5223ac83ab60720d3536b42363.jpg","http://192.168.1.100:8080/img/d833c895d143ad4b99b5d1c080025aafa40f0612.jpg","http://192.168.1.100:8080/img/db08ab97060da52c484569bf7113d8ea.jpg","http://192.168.1.100:8080/img/de2563343fededa0aea0bfe5a040840c.jpg","http://192.168.1.100:8080/img/e01491bfc1a6f9fdd273779b582d3f53.jpg","http://192.168.1.100:8080/img/e7c04293605ff797a8adbb9369dda2eb.jpg","http://192.168.1.100:8080/img/e7cd7b899e510fb36deec090db33c895d0430cc5.jpg","http://192.168.1.100:8080/img/eac4b74543a98226e5f5cd768882b9014a90ebaf.jpg","http://192.168.1.100:8080/img/f2deb48f8c5494ee7e883e112ff5e0fe99257e0b.jpg","http://192.168.1.100:8080/img/f6baf658a81853bcc3b383b1d886d16e.jpg","http://192.168.1.100:8080/img/f87228e52049993ea750a79e39f1e3b9.jpg","http://192.168.1.100:8080/img/fa7ac7801e26b0a01f99dfeab0e20e6e.jpg","http://192.168.1.100:8080/img/fcfaaf51f3deb48f9d86ebd9f21f3a292cf578cd.jpg","http://192.168.1.100:8080/img/1000x1500_803068byte.jpg","http://192.168.1.100:8080/img/1020x637_312320byte.jpg","http://192.168.1.100:8080/img/fda7c901b289af73f4b5e9d9cc21a069.jpg"};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);listView = (ListView) findViewById(R.id.listview);MyAdapter adapter = new MyAdapter(this, null);listView.setAdapter(adapter);}
}

可以把程序跑起来了,如下:(由于服务器崩掉了,暂时使用默认图片吧,见谅)

Android简易实战教程--第三十二话《使用Lrucache和NetworkImageView加载图片》相关推荐

  1. Android简易实战教程--第五十四话《视差特效》

    查看更多进阶知识,可以关注我的公众号,微信搜索:Android小菜 这个简易实战教程系列专栏发现已经大半年没更新了啊,赶紧添点东西. 本文实现一个视差特效效果,动态效果如下: 代码十分简单,自定义Vi ...

  2. Android简易实战教程--第四十四话《ScrollView和HorizontalScrollView简单使用》

    一.ScrollView 由于手机屏幕的高度有限,当普通布局放不下现实和的内容时,ScrollView视图(滚动视图)就会派上用场,因为数据可以往下滚动显示. 二.HorizontalScrollVi ...

  3. Android简易实战教程--第二十四话《画画板》

    今天完成一个画画板. 首先来个布局: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android ...

  4. Android简易实战教程--第五话《开发一键锁屏应用》

    转载请注明出处:http://blog.csdn.net/qq_32059827/article/details/51860900 点击打开链接 Device Administration 对于这个应 ...

  5. Android简易实战教程--第四十七话《使用OKhttp回调方式获取网络信息》

    在之前的小案例中写过一篇使用HttpUrlConnection获取网络数据的例子.在OKhttp盛行的时代,当然要学会怎么使用它,本篇就对其基本使用做一个介绍,然后再使用它的接口回调的方式获取相同的数 ...

  6. Android简易实战教程--第九话《短信备份~二》

    这一篇,承接地八话.使用高效的方式备份短信--xml序列化器. 存储短信,要以对象的方式存储.首先创建javabean: package com.itydl.createxml.domain;publ ...

  7. tensorflow学习笔记(三十四):Saver(保存与加载模型)

    Saver tensorflow 中的 Saver 对象是用于 参数保存和恢复的.如何使用呢? 这里介绍了一些基本的用法. 官网中给出了这么一个例子: v1 = tf.Variable(..., na ...

  8. 第三十九讲:tapestry 页面加载等待过程(ProgressiveDisplay)组件

    2019独角兽企业重金招聘Python工程师标准>>> ProgressiveDisplay组件其实就是londing.在请求没完成时调出一个等待的gif动画,告诉用户请求没完成请等 ...

  9. Android中使用ImageLoader加载图片

    Android上让人头疼的莫过于从网络上获取图片,然后显示图片,最后还要考虑到图片的回收问题,这之间只要有任何一个环节有问题都可能直接OOM.尤其在需要展示图片的列表页面,会加载大量网络上的图片,每当 ...

最新文章

  1. 重磅!Github 开放无数量限制的免费私有仓库!
  2. LeetCode Summary Ranges(简单的数组处理)
  3. Java 洛谷 P1150 Peter的烟
  4. 活动社交产品怎么设计排序算法?
  5. C#网络编程概述 三
  6. jq ajax调用php函数,jQuery
  7. java 开发 加固态_搭建一个完整的Java开发环境
  8. 图表(Chart Graph)你真的用对了吗?
  9. 蓝牙精确定位技术下的化工厂安全管理系统,蓝牙定位标签-新导智能
  10. XP3 Dumper GUI
  11. 3D建模软件快捷键操作:3DMAX篇(第二期)
  12. CSS中的伪类选择器、颜色、度量单位、文本字体及文本样式设置
  13. 大数据时代,你应该知道的生活真相(下)
  14. 在不格式化U盘的情况下查杀U盘快捷方式病毒
  15. 把撒哈拉沙漠变成一个太阳能农场,这可能吗?
  16. WIN10电脑热点无法共享
  17. python英文词频统计-Python实现统计英文文章词频的方法分析
  18. 小程序影藏溢出的gif_视频转gif怎么弄?视频片段转动图 将影视片段制作成微信表情包的方法~...
  19. ST M24C01-WDW6TP EEPROM存储器芯片
  20. git 手动master_git 如何撤销一次remote的master commit?

热门文章

  1. mysql lag over_lag函数(lag函数用法)
  2. 《从零开始的RPG游戏制作教程》第二期:让勇者和怪物登场
  3. 算法基础:4115:鸣人和佐助--广度优先搜索
  4. dilink虚拟服务器怎么设置,最简单的dlink路由器设置教程
  5. AST实战|手把手教你还原ob混淆:ob混淆代码特征
  6. Excel 使用小妙招之解决“##”显示问题
  7. Python 2D游戏项目开发日记——像素世界(一)
  8. 【JokerのZYNQ7020】UART
  9. Java创建学生喂养动物类
  10. 应用打开方式是计算机程序,电脑文件打开方式里不能选择程序 解决方案