直接上代码  两种方式 ImageView 和NetworkImageView

如有问题或者好的建议、意见 欢迎大家加入技术群(群号: 387648673 )

先自定义全局Application 获取

public classMyApplication extends Application {
      private static RequestQueuerequestQueue;
      private static MyApplicationapplication;
      
      @Override
      public void onCreate() {
           // TODO Auto-generated methodstub
           super.onCreate();
           application = this;
           requestQueue =Volley.newRequestQueue(this);
      }
      public static MyApplicationgetInstance() {
           // TODO Auto-generated methodstub
           return application;
      }
      public static RequestQueuegetRequestQueue(){
           
           return requestQueue;
      }
}

先上布局文件

<?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" >

<ImageView
        android:id="@+id/iv_test1"
        android:layout_width="match_parent"
        android:layout_height="300dp"
        android:layout_marginTop="10dp"/>

<com.android.volley.toolbox.NetworkImageView
        android:id="@+id/iv_test2"
         android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp" >
    </com.android.volley.toolbox.NetworkImageView>

</LinearLayout>

方式一用ImageView加载

需要封装一下自定义的BitmapCache类实现图片缓存接口ImageCache

public class BitmapCache implements ImageCache{

public LruCache<String, Bitmap> cache;

public BitmapCache(){
int maxMermorySize = (int)(Runtime.getRuntime().maxMemory()/1024);
cache = new LruCache<String, Bitmap>(maxMermorySize/8){
@Override
protected int sizeOf(String key, Bitmap value) {
// TODO Auto-generated method stub
return value.getRowBytes()*value.getHeight()/1024;

}
};

}

@Override
public Bitmap getBitmap(String key) {
// TODO Auto-generated method stub
return cache.get(key);
}

@Override
public void putBitmap(String key, Bitmap value) {
// TODO Auto-generated method stub
cache.put(key, value);
}

}

方式二 用NetworkImageView记载

封装一个VolleyUtils图片加载并处理缓存的类,使用起来就比较方便了

public class VolleyUtils {

private static ImageLoader imageLoader;
private static LruCache<String,Bitmap> lruCache;
private static HashMap<String,SoftReference<Bitmap>> softmap;

private static void initCache() {
// TODO Auto-generated method stub
//实例化二级缓存
softmap = new HashMap<String, SoftReference<Bitmap>>();
//实例化一级缓存  字节单位 KB
int maxMermorySize = (int)(Runtime.getRuntime().maxMemory()/1024);
lruCache = new LruCache<String, Bitmap>(maxMermorySize/8){
@Override
protected int sizeOf(String key, Bitmap value) {
// TODO Auto-generated method stub
//return lruCache.size()
return value.getRowBytes()*value.getHeight()/1024;//返回KB的大小
}
@Override
protected void entryRemoved(boolean evicted, String key,
Bitmap oldValue, Bitmap newValue) {
//当oldValue被一级缓存逐出时,放入二级缓存中
if (evicted) {
softmap.put(key, new SoftReference<Bitmap>(oldValue));
}
}
};

}
public static ImageLoader getImageLoader(Context context){

if (imageLoader==null) {
initCache();
imageLoader = new ImageLoader(MyApplication.getRequestQueue(), new ImageCache() {

@Override
public void putBitmap(String url, Bitmap bitmap) {
// 存入一级缓存
lruCache.put(url, bitmap);
}

@Override
public Bitmap getBitmap(String url) {

//从一级缓存中获取
Bitmap bitmap = lruCache.get(url);
//判断一级缓存是否存在
if ( bitmap== null) {//一级缓存不存在
//从二级缓存中获取
SoftReference<Bitmap> softRef = softmap.get(url);
if (softRef!=null) {
bitmap = softRef.get();
//获取软引用中图片
//为了便于使用将二级缓存中的图片存放一级缓存中
     lruCache.put(url, bitmap);
     //将此图片从二级缓存中移除
     softmap.remove(url);
}
}
return null;
}
});
}
return imageLoader;

}

}

在Activity或者Fragment或者适配中可以直接调取用,下边是以Activity为实例的代码

private ImageView test1;//用ImageView加载网略图片

private NetworkImageView test2;//用NetworkImageView记载网略图片

@Override
protected void onCreate(Bundle arg0) {
// TODO Auto-generated method stub
super.onCreate(arg0);
test1 = (ImageView)findViewById(R.id.iv_test1);

test2 = (NetworkImageView) findViewById(R.id.iv_test2);

initImage();
}

private void initImage(){

//本人随便找了一张美女的图片

String url = "http://img.pconline.com.cn/images/upload/upc/tx/wallpaper/1205/25/c2/11755122_1337938898582.jpg";

//方式一用ImageView加载
ImageLoader loader = new ImageLoader(MyApplication.getRequestQueue(), new BitmapCache());
ImageListener listener = ImageLoader.getImageListener(test1, 
R.drawable.ic_launcher, R.drawable.ic_launcher);
loader.get(url, listener);

//方式二用NetworkImageView加载

ImageLoader imageLoader = VolleyUtils.getImageLoader(this);
test2.setDefaultImageResId(R.drawable.ic_launcher);
test2.setErrorImageResId(R.drawable.ic_launcher);
test2.setImageUrl(url, imageLoader);

}

Volley图片加载并加入缓存处理(转自http://blog.csdn.net/viewhandkownhealth/article/details/50957024)的更多相关文章

  1. Volley 图片加载相关源码解析

    转载请标明出处: http://blog.csdn.net/lmj623565791/article/details/47721631: 本文出自:[张鸿洋的博客] 一 概述 最近在完善图片加载方面的 ...

  2. Android开发笔记——以Volley图片加载、缓存、请求及展示为例理解Volley架构设计

    Volley是由Google开源的.用于Android平台上的网络通信库.Volley通过优化Android的网络请求流程,形成了以Request-RequestQueue-Response为主线的网 ...

  3. 【第三篇】Volley图片加载之NetworkImageView代码分析

    在Volley的使用之加载图片讲过使用NetWorkImageView进行图片加载的例子,本文着重讲解NetWorkImageView内部是如何实现的,以及Volley这个控件有什么特性.   1,通 ...

  4. android-------非常好的图片加载框架和缓存库(Picasso)

    Picasso是Square公司开源的一个Android图形缓存库, 可以实现图片加载(本地和网络)和缓存功能. 地址:http://square.github.io/picasso/ jar包下载: ...

  5. iOS Cell异步图片加载优化,缓存机制详解

    最近研究了一下UITbleView中异步加载网络图片的问题,iOS应用经常会看到这种界面.一个tableView上显示一些标题.详情等内容,在加上一张图片.这里说一下这种思路. 为了防止图片多次下载, ...

  6. 网页中通过js修改img的src属性刷新图片时,图片缓存问题现象表述及问题解决【ps:引用大神案例http://blog.csdn.net/goodleiwei/article/details/50737548】

    问题:上传一张图片,通过js更新src属性刷新图片使其即时显示时, 当img的src当前的url与上次地址无变化时(只更改图片,名称不变,不同图片名称相同)图片不变化(仍显示原来的图片) 但通过fir ...

  7. JVM中java类的加载时机(转载:http://blog.csdn.net/chenleixing/article/details/47099725)

    Java虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验.转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的加载机制.类从被加载到虚拟机内存中开始,到卸载出内 ...

  8. spring加载hibernate映射文件的几种方式。转自:http://blog.csdn.net/huiwenjie168/article/details/7013618

    在Spring的applicationContext.xml中配置映射文件,通常是在<sessionFactory>这个Bean实例中进行的,若配置的映射文件较少时,可以用sessionF ...

  9. 谁动了我的内存:php内存泄露,系统缓存消耗? 转摘:http://blog.csdn.net/tao_627/article/details/9532497

    http://www.laruence.com/2011/03/04/1894.html 前言:持续我一贯的标题党作风,说说例子解决方案,没有深入探讨. 情景:线上图片服务压缩的图片品质(100),缩 ...

随机推荐

  1. 201521123030《Java程序设计》第5周学习总结

    1. 本周学习总结 1.代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 因为i在类中是priv ...

  2. 201521123059 《Java程序设计》第一周学习总结

    第一周学习总结 1.本周学习总结 开学第周我们开始了JAVA学习,刚开始还有点懵,连熟悉相关的软件都要摸索很久,最后在看老师给的一些教程和课本的情况下安装了JDK和eclipse等软件,并进行了一次实 ...

  3. 201521123035《Java程序设计》第十一周作业

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 本周对多线程的冲突是从多线程的冲突开始讲起,从而提出互斥共享与互斥访问.其中,互斥访问提到了synchronize ...

  4. 201521123112《Java程序设计》第12周学习总结

    1.本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2.书面作业 将Student对象(属性:int id, String name,int age,double ...

  5. json:JSONObject与JSONArray的使用

    1.JAR包简介 要使程序可以运行必须引入JSON-lib包,JSON-lib包同时依赖于以下的JAR包: commons-lang.jar commons-beanutils.jar commons ...

  6. JSP页面格式化数字或时间 基于jstl的

    jsp页面格式化数字或时间 转载自: http://blog.csdn.net/hakunamatata2008/archive/2011/01/21/6156203.aspx Tags fmt:re ...

  7. JUDE-UML工具软件介绍

    JUDE社区版(不考虑破-解). 现在Jude改名为Astah了.JUDE已停止发展,Astah是它的替代品.Jude有3个版: Professional版, Community版(免费),Share ...

  8. Ansible系列(六):各种变量定义方式和变量引用

    本文目录:1.1 ansible facts1.2 变量引用json数据的方式 1.2.1 引用json字典数据的方式 1.2.2 引用json数组数据的方式 1.2.3 引用facts数据1.3 设 ...

  9. MySQL_日期函数汇总

              如果转载,请注明博文来源: www.cnblogs.com/xinysu/   ,版权归 博客园 苏家小萝卜 所有.望各位支持!         关于MySQL日期时间函数,每回总 ...

  10. 黑马程序员Java基础班+就业班课程笔记全发布(持续更新)

    正在黑马学习,整理了一些课程知识点和比较重要的内容分享给大家,也是给自己拓宽一些视野,仅供大家交流学习,大家有什么更好的内容可以发给我 ,现有黑马教程2000G  QQ 1481135711 这是我总 ...