关于 ImageLoader 说的够细了。。。
使用该开源项目的之前,先给该开源项目在Github上的地址吧。
开始的时候,自己看得也是很头痛,因为许多自己不要的东西上面配置的也多,下面简单给有需要的童鞋介绍下使用吧,暂不涉及太多的东西。
我们看看项目的结构:
这里有四个例子,针对ListView ,Gallery ,GridView和Viewpager大量使用图片,做了简单的使用示例。
里面写的很复杂,入门的话,也许要看许久,现在省略理论的那些东西,说下直接点的。
下面是一般的使用步骤:
1.重写application,并初始化配置,在这有缓存图片和不缓存图片两种设置:
在这之前,你需要倒入demo中的jar包,这个没啥说的。
在oncreate()中添加:
1.未缓存图片:
- ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
 - .threadPriority(Thread.NORM_PRIORITY - 2)
 - .denyCacheImageMultipleSizesInMemory()
 - .discCacheFileNameGenerator(new Md5FileNameGenerator())
 - .tasksProcessingOrder(QueueProcessingType.LIFO)
 - .enableLogging() // Not necessary in common
 - .build();
 - ImageLoader.getInstance().init(config);
 
2.缓存图片:
- DisplayImageOptions defaultOptions = new DisplayImageOptions.Builder()
 - .cacheInMemory().cacheOnDisc().build();
 - ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(
 - context).defaultDisplayImageOptions(defaultOptions)
 - .threadPriority(Thread.NORM_PRIORITY - 2)
 - .denyCacheImageMultipleSizesInMemory()
 - .discCacheFileNameGenerator(new Md5FileNameGenerator())
 - .tasksProcessingOrder(QueueProcessingType.LIFO).build();
 - ImageLoader.getInstance().init(config);
 
在使用ImageLoader的实例之前,你需要初始化该配置,否则会报初始化错误。一般我们直接写在application中初始化。
在初始化配置完成后,在清单中写入你自定义的application,并写入访问权限。
- <uses-permission android:name="android.permission.INTERNET" />
 - <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
 - <application
 - android:name="com.demo.DemoApp"
 
2.在activity中加载图片,这里针对不同的参数,可能使用的方法和配置也不咋相同:
其实对于图片的加载主要有三种方法:
1.displayImages及其重载,在Imageview组件中直接加载图片。
- public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
 - ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
 
其同名的重载方法,使用的多的是下面几个:
直接加载:
- public void displayImage(String uri, ImageAware imageAware) {
 - displayImage(uri, imageAware, null, null, null);
 - }
 
选项加载:
- public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options) {
 - displayImage(uri, imageAware, options, null, null);
 - }
 
带监听加载:
- public void displayImage(String uri, ImageAware imageAware, ImageLoadingListener listener) {
 - displayImage(uri, imageAware, null, listener, null);
 - }
 
选项+监听加载:
- public void displayImage(String uri, ImageAware imageAware, DisplayImageOptions options,
 - ImageLoadingListener listener) {
 - displayImage(uri, imageAware, options, listener, null);
 - }
 
2.loadImages及其重载,它的内部其实也会调用displayImages方法:
- public void loadImage(String uri, ImageSize targetImageSize, DisplayImageOptions options,
 - ImageLoadingListener listener, ImageLoadingProgressListener progressListener)
 
主要的是那个监听的方法ImageLoadListener,会监听开始,失败,完成和取消的状态。在完成后,会返回bitmap对象。
- void onLoadingComplete(String imageUri, View view, Bitmap loadedImage);
 
3.loadImageSync及其重载,它会返回一个Bitmap对象,自定义View的时候,需要bitmap来绘制图形,就可以使用该方法了。
- public Bitmap loadImageSync(String uri, ImageSize targetImageSize, DisplayImageOptions options)
 
加载的方法说完了,下面来谈谈选项:
- public final class DisplayImageOptions {
 - private final int imageResOnLoading;
 - private final int imageResForEmptyUri;
 - private final int imageResOnFail;
 - private final Drawable imageOnLoading;
 - private final Drawable imageForEmptyUri;
 - private final Drawable imageOnFail;
 - private final boolean resetViewBeforeLoading;
 - private final boolean cacheInMemory;
 - private final boolean cacheOnDisk;
 - private final ImageScaleType imageScaleType;
 - private final Options decodingOptions;
 - private final int delayBeforeLoading;
 - private final boolean considerExifParams;
 - private final Object extraForDownloader;
 - private final BitmapProcessor preProcessor;
 - private final BitmapProcessor postProcessor;
 - private final BitmapDisplayer displayer;
 - private final Handler handler;
 - private final boolean isSyncLoading;
 - private DisplayImageOptions(Builder builder) {
 - imageResOnLoading = builder.imageResOnLoading;
 - imageResForEmptyUri = builder.imageResForEmptyUri;
 - imageResOnFail = builder.imageResOnFail;
 - imageOnLoading = builder.imageOnLoading;
 - imageForEmptyUri = builder.imageForEmptyUri;
 - imageOnFail = builder.imageOnFail;
 - resetViewBeforeLoading = builder.resetViewBeforeLoading;
 - cacheInMemory = builder.cacheInMemory;
 - cacheOnDisk = builder.cacheOnDisk;
 - imageScaleType = builder.imageScaleType;
 - decodingOptions = builder.decodingOptions;
 - delayBeforeLoading = builder.delayBeforeLoading;
 - considerExifParams = builder.considerExifParams;
 - extraForDownloader = builder.extraForDownloader;
 - preProcessor = builder.preProcessor;
 - postProcessor = builder.postProcessor;
 - displayer = builder.displayer;
 - handler = builder.handler;
 - isSyncLoading = builder.isSyncLoading;
 - }
 
这个看自己的需要配置,各个参数的作用跟它的英文意思一样,认真看下大概就明白了,没必要所有的都去配置,下面是一般使用的选项参数:
缓存图片:
- DisplayImageOptions options = new DisplayImageOptions.Builder()
 - .showStubImage(R.drawable.ic_stub) // 设置图片下载期间显示的图片
 - .showImageForEmptyUri(R.drawable.ic_empty) // 设置图片Uri为空或是错误的时候显示的图片
 - .showImageOnFail(R.drawable.ic_error) // 设置图片加载或解码过程中发生错误显示的图片
 - .cacheInMemory(true) // 设置下载的图片是否缓存在内存中
 - .cacheOnDisc(true) // 设置下载的图片是否缓存在SD卡中
 - .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
 - .build(); // 创建配置过得DisplayImageOption对象
 - ImageLoader.getInstance().displayImage(url, imageView, options);
 
好了,基本的步骤就差不多了。
效果(图片来自百度图库):
注意:
1.但是要注意传入的URI ,要分网络地址和本地地址,我这传入的是本地图片地址。
对该方法的说明:
- /**
 - * Adds display image task to execution pool. Image will be set to ImageView when it's turn.<br />
 - * <b>NOTE:</b> {@link #init(ImageLoaderConfiguration)} method must be called before this method call
 - *
 - * @param uri Image URI (i.e. "http://site.com/image.png", "file:///mnt/sdcard/image.png")
 - * @param imageView {@link ImageView} which should display image
 - * @param options {@linkplain com.nostra13.universalimageloader.core.DisplayImageOptions Options} for image
 - * decoding and displaying. If <b>null</b> - default display image options
 - * {@linkplain ImageLoaderConfiguration.Builder#defaultDisplayImageOptions(DisplayImageOptions)
 - * from configuration} will be used.
 - * @throws IllegalStateException if {@link #init(ImageLoaderConfiguration)} method wasn't called before
 - * @throws IllegalArgumentException if passed <b>imageView</b> is null
 - */
 - public void displayImage(String uri, ImageView imageView, DisplayImageOptions options) {
 - displayImage(uri, new ImageViewAware(imageView), options, null, null);
 - }
 
对于本地的图片 ,在其绝对地址前面要加入"file://"。网络图片就直接写路径了。
由于我的这个是最新的包,可能跟以前老的版本不同,看到有些网友说的是:
- String imageUri = "http://site.com/image.png"; // 网络图片
 - String imageUri = "file:///mnt/sdcard/image.png"; //SD卡图片
 - String imageUri = "content://media/external/audio/albumart/13"; // 媒体文件夹
 - String imageUri = "assets://image.png"; // assets
 - String imageUri = "drawable://" + R.drawable.image; // drawable文件
 
2.:Unable to resolve target 'android-19' 错误:
修改编译的版本为你现在有的版本,或者升级你的版本到19.然后在project.properties中修改你的版本号跟编译的版本号相同。
关于 ImageLoader 说的够细了。。。的更多相关文章
- 不要听吹牛逼什么前端MVVM框架就是好,其实都是一帮没学好分层设计的搞出来的,让你彻底看清前端MVVM的本质
		
最近前端圈子里面,发现大家都在热炒概念,什么knockout,angularJs,都被捧成神了,鄙人不才,最近心情也不好,特地写这篇文章来找骂 写代码的码农都知道,Java社区虽然不是一个提出分层思想 ...
 - Livermore心法--策略篇
		
「三三不尽,六六无穷」就是Livermore选股法的精要,以6%设关键位,3%定突破. 可是,在买卖策略方面,却不能光靠看突破就随便买入. 以Livermore的讲法,通常一只股突破前关键位后,会有轻 ...
 - # 36氪开放日 • 杭州 • 11月10日 # 谈谈参会感受
		
今天下午,第一次去参加了36氪的开放日,虽然站着听有点累,但是也很值得.会上很多创业者都分享和展示了他们的产品,一方面自己了解了一些产品人的故事,另一方面也对如何做产品有了新的认识.参会 ...
 - 【我所认知的BIOS】—> uEFI AHCI Driver(4) — 第一个Protocol真难搞
		
[我所认知的BIOS]-> uEFI AHCI Driver(4) - 第一个Protocol真难搞 LightSeed 4/23/2014 文章对EFI_DRIVER_BINDING_PROT ...
 - 由浅入深讲述MVVM
		
相信首次听说MVVM的人,内心都是充满疑惑的!这是个嘛???能干嘛??? MVVM是Model-View-ViewModel的简写.它本质上就是MVC (Model-View- Controller) ...
 - Hibernate-day03
		
双向的many2one/one2many 双向many2one/one2many的问题:一定有额外的SQL发出;在数据库里面,外键表示many2one或者one2many的关系,外键是没有方向的;但是 ...
 - 第二次项目冲刺(Beta版本)
		
第二次项目冲刺(Beta版本) 团队作业7--第二次项目冲刺(Beta版本)day1 http://www.cnblogs.com/wj946/p/8017787.html 团队作业7--第二次项目冲 ...
 - java异常(编程思想)
		
通过异常处理错误 java的基本理念是“结构不佳的代码不能运行” 发现错误的理想时机是在编译阶段,也就是在你试图运行程序之前.然而编译期间并不能找出所有的错误,余下的问题必须在运行间解决.这就需要错误 ...
 - 【我所认知的BIOS】—> uEFI AHCI Driver(5) — 第一个protocol最终要開始安装了
		
[我所认知的BIOS]-> uEFI AHCI Driver(5) - 第一个protocol最终要開始安装了 LightSeed 4/28/2014 文章对EFI_DRIVER_BINDING ...
 
随机推荐
- NIO概述及实例(时钟服务器)
			
NIO,非阻塞IO,重点是非阻塞而不是异步! NIO的一般实现如下: package com.pt.nio; import java.net.InetSocketAddress; import jav ...
 - JS文档DOM
			
访问指定节点 通过document节点获取 document.getElementById(elementId) document.getElementsByName(elementName) d ...
 - OpenDayLight Helium实验三  OpenDaylight二层转发机制实验
			
本文基于OpenDaylight二层转发机制实验 而成 在SDN网络中,处于末端的主机并不知道其连接的网络是SDN,某台主机要发送数据包到另一台主机,仍然需要进行IP到MAC地址的ARP解析.SDN网 ...
 - 2017NOIP模拟赛-科普基地
			
今天回来打的第一场NOIP难度的试题,结果惨不忍睹.写一下每道题的做法,然后每道题犯的__弱智__错误 UPD:2018.9.15 突然这篇题解就变成很多大佬要看的了,因为之前是写给自己看的,所以写的 ...
 - CentOS环境Docker安装教程(官方推荐的docker三种方式安装)
			
CentOS环境Docker安装教程(官方推荐的docker三种方式安装) 一.使用yum方式安装 1.安装依赖包 $ sudo yum install -y yum-utils device-map ...
 - 快递100API接口调用代码示例
			
package com.util; import java.io.IOException; import java.io.InputStream; import java.net.MalformedU ...
 - QWebEngineView_简单例子_01
			
工程名 : WebEngine01 1.WebEngine01.pro #------------------------------------------------- # # Project c ...
 - Coderforce 560B-Gerald is into Art
			
题目大意:给了三个矩形的长和宽,问第一个能否把其他两个装在内部,要求内部之间不重叠,不出界(可重边)? 题目分析:这道题...考虑不够全面导致比赛时没有出来...当时,就是觉得自己的代码很完美,不可能 ...
 - EPANET头文件解读系列3——TOOLKIT.H
			
/******************************************************************** TOOLKIT.H - Prototypes for EPA ...
 - C# 简单生成双色球代码
			
红球篮球产生代码 public class TestD { //产生几组数据 public void getzhu( int num) { ; m < num; m++) { getred(); ...