imageLoader之介绍
相信大家在学习以及实际开发中基本都会与网络数据打交道,而这其中一个非常影响用户体验的就是图片的缓存了,若是没有弄好图片缓存,用户体验会大大下降,总会出现卡顿情况,而这个问题尤其容易出现在ListView中的Item有图片的情况中。
前面与大家分享了一个网络连接框架Retrofit,里面也有类似的图片加载的picasso,大家都可以去体验,直通车:http://www.cnblogs.com/liushilin/p/5680135.html
当然还有当前我认为最好用的图片缓存加载框架Fresco,直通车:http://www.cnblogs.com/liushilin/p/5659301.html
大家可能有所不解,为什么有这么好的框架Fresco了,楼主为什么还要分享这个ImageLoader呢?什么鬼。或许大家看法不一样嘛,总之各有各存在的意义,具体就大家自行甄别咯。
项目已同步至:https://github.com/nanchen2251/ImageLoaderDemo
1)先来看看ImageLoader框架的特征。
①多线程下载图片,图片可以来源于网络,文件系统,项目文件夹assets中以及drawable中等
②支持随意的配置ImageLoader,例如线程池,图片下载器,内存缓存策略,硬盘缓存策略,图片显示选项以及其他的一些配置
③支持图片的内存缓存,文件系统缓存或者SD卡缓存
④支持图片下载过程的监听
⑤根据控件(ImageView)的大小对Bitmap进行裁剪,减少Bitmap占用过多的内存
⑥较好的控制图片的加载过程,例如暂停图片加载,重新开始加载图片,一般使用在ListView,GridView中,滑动过程中暂停加载图片,停止滑动的时候去加载图片
⑦提供在较慢的网络下对图片进行加载
2)然后要使用它,肯定得添加这个支持包,在studio里面支持直接add,搜索Image-loader即可进行网络添加,需要看它源码的也可以去github网上gank.
3)先来一个简单使用,加载一张网络图片,只需要两行代码,可见其简单之处。

1 <?xml version="1.0" encoding="utf-8"?>
2 <RelativeLayout
3 xmlns:android="http://schemas.android.com/apk/res/android"
4 xmlns:tools="http://schemas.android.com/tools"
5 android:layout_width="match_parent"
6 android:layout_height="match_parent"
7 tools:context="com.example.nanchen.imageloaderdemo.MainActivity">
8
9 <ImageView
10 android:layout_width="wrap_content"
11 android:layout_height="wrap_content"
12 android:src="@mipmap/ic_launcher"
13 android:id="@+id/main_image"
14 android:layout_centerInParent="true"/>
15 </RelativeLayout>

再看看Activity

package com.example.nanchen.imageloaderdemo; import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.widget.ImageView; import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration; public class MainActivity extends AppCompatActivity { private String imageUrl = "http://pic.cnblogs.com/face/845964/20160301162812.png";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); ImageView imageView = (ImageView) findViewById(R.id.main_image);
ImageLoader.getInstance().init(ImageLoaderConfiguration.createDefault(this));//初始化完成
ImageLoader.getInstance().displayImage(imageUrl,imageView);
}
}

由于是访问网络图片,所以别忘了添加网络权限
|
1
|
<uses-permission android:name="android.permission.INTERNET"/> |
运行图:

很简单有木有,不用你去写网络访问,不用你去异步执行,只要两句话,只要两句话!!!
4)当然,你还可以尽情的设置它,上面只是用了简单的Default属性,实际开发中我们可能需要自己按照自己的需求去写它,这里就设置了加载失败显示的图片,还有对于缓存机制的管理等。

1 //图片展示的管理操作
2 DisplayImageOptions options = new DisplayImageOptions.Builder()
3 .cacheInMemory(true)
4 .cacheOnDisk(true)
5 .displayer(new RoundedBitmapDisplayer(20))
6 .showImageOnFail(R.mipmap.ic_launcher)
7 .bitmapConfig(Bitmap.Config.RGB_565)
8 .build();
9
10
11 //这样自定义设置后就可以管理二级缓存和三级缓存了
12 ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
13 .memoryCacheSizePercentage(20)//设置占用内存的百分比
14 .diskCacheFileCount(100)//设置最大下载图片数
15 .diskCacheSize(5 * 1024 * 1024)
16 .defaultDisplayImageOptions(options)
17 .build();
18
19 ImageLoader.getInstance().init(configuration);//初始化完成
20 ImageLoader.getInstance().displayImage(imageUrl,imageView);

这里还有很多其他的属性啦。
当然其中使用ImageLoader加载网络图片并不是只有displayImage这个方法的,只是我觉得这是它的方法中相对简单的一种了。
它其实还有loadImage(),loadImageSync()两种方式,loadImageSync()方法是同步的,android4.0有个特性,网络操作不能在主线程,所以loadImageSync()方法我们就不去使用了。对于另外的方式大家可以自行尝试,不过我的确很推荐上面的方法了。
4)另外ImageLoader自然也是支持加载sd卡图片和Content provider等,使用起来也比较简单,只需要简单添加两句话即可
1 String imagePath = "/mnt/sdcard/image.png";
2 String imageUrl = ImageDownloader.Scheme.FILE.wrap(imagePath);
3
4 ImageLoader.getInstance().init(configuration);//初始化完成
5 ImageLoader.getInstance().displayImage(imageUrl,imageView);
5)当然,我相信要使用图片加载框架,更多的人是用ListView和GridView来显示大量的图片,而当我们快速地滑动滚动条的时候,如果同时进行网络加载的话,我们会发现性能大受迎新,那样会出现卡顿情况严重。所以我们应该在滑动的时候不允许加载图片,待滑动结束的时候才加载,这个框架自然少不了这个功能,它提供了PauseOnScrollListner.
lv.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
gv.setOnScrollListener(new PauseOnScrollListener(imageLoader, pauseOnScroll, pauseOnFling));
其中的三个参数很简单,第一个是我们的ImageLoader的实例对象,第二个是boolean型参数,需要停止滑动的时候传入一个true,第三个参数控制很快速的滑动的时候图片是否加载。
imageLoader之介绍的更多相关文章
- ImageLoader_ _Universal-Image-Loader完全解析(一)之介绍与使用详解
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50439814 本文出自:[江清清的博客] (一).前言: 已经半个月 ...
- 【UIL框架】Universal-Image-Loader全然解析(一)之介绍与使用具体解释
转载请标明出处: http://blog.csdn.net/developer_jiangqq/article/details/50439814 本文出自:[江清清的博客] (一).前言: [好消息] ...
- Android图片加载库的理解
前言 这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是 ...
- Glide二次封装库的使用
更多代码可以查询本人GitHub:欢迎阅读,star点起来. Glide二次封装库源码 前言 为什么选择Glide? Glide 轻量级 速度快 可以根据所需加载图片的大小自动适配所需分辨率的图 支持 ...
- 关于ImageLoader的详细介绍
转载请注明本文出自xiaanming的博客(http://blog.csdn.net/xiaanming/article/details/26810303),请尊重他人的辛勤劳动成果,谢谢! 相信大家 ...
- Android ImageLoader(Android-Universal-Image-Loader)【1】概述及使用简单介绍
Android ImageLoader(Android-Universal-Image-Loader)[1]概述及使用简单介绍 一,前言:为什么要引入Android-Universal-Imag ...
- ImageLoader介绍2
Universal Image Loader 是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示.所以,如果你的程序里需要这个功能的话,那么不妨试试它.他本来是 ...
- Android 开源框架Universal-Image-Loader完全解析(一)--- 基本介绍及使用
转载博客:http://blog.csdn.net/xiaanming/article/details/26810303 大家好!差不多两个来月没有写文章了,前段时间也是在忙换工作的事,准备笔试面试什 ...
- ImageLoader图片加载
http://blog.csdn.net/liu1164316159/article/details/38728259 转载请注明http://write.blog.csdn.net/po ...
随机推荐
- webpack执行命令参数
在webpack执行命令之后可以添加一些参数,这些参数都有自己的作用,下面是参数列表: $ webpack --config XXX.js //使用另一份配置文件(比如webpack.config2. ...
- Chrome——F12 谷歌开发者工具详解
我们这里介绍主要的几块:Console.Source.Network Console 大家都有用过各种类型的浏览器,每种浏览器都有自己的特色,本人拙见,在我用过的浏览器当中,我是最喜欢Chrome的, ...
- KiCad 的 Digikey 元件库
KiCad 的 Digikey 元件库 KiCad 最初由法国人Jean-Pierre Charras于1992年推出,目前由 CERN(欧洲核子研究组织)接手开发. 而且现在有很多大公司的加入,比如 ...
- Mysql主从---删除master.info和relya-log.info实验
relay-log.info, master.info 这连个文件时在建立复制时产生的,现在主要说明以下问题: 1.如果修改删除master.info文件,复制会中断么? 不会,如果stop slav ...
- 預約申領往來港澳通行證及簽注x
http://www.ctshk.com/passport/talent_bookrep.htm 換領往來港澳通行證和申請簽注延期須知 為方便持<往來港澳通行證>以內地逗留簽注在香港工作. ...
- python时间戳转时间
import time timestamp = 1462451334 #转换成localtime time_local = time.localtime(timestamp) #转换成新的时间格式(2 ...
- cat命令详解
命令cat cat 命令用于连接文件并打印到标准输出设备上 语法格式: cat [-AbeEnstTuv] [--help] [--version] fileName 参数说明: -n 或 --num ...
- CentOS6.5 安装+ Tengine + PHP + MySQL
简介: Tengine是由淘宝网发起的Web服务器项目.它在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性.Tengine的性能和稳定性已经在大型的网站如淘宝网,天猫商城等得到了 ...
- C语言中基本的数据类型
一般来说,一个C的工程中一定要做一些这方面的工作,因为你会涉及到跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以让你最有效的维护你的代码.为了用户的方便,C99标准的C语言硬件为我 ...
- IIC总线初识
IIC总线初识 IIC总线的拓扑结构 八位数据分布: 写操作: 读操作: IIC总线的工作频率: IIC总线的时序(重要): 起始位的时序: 用verilog代码描述这一过程: 此处是用来描述SDA信 ...