第三方的图片加载( Android-Universal-Image-Loader)
Android-Universal-Image-Loader是一个开源的UI组件程序,该项目的目的是提供一个可重复使用的仪器为异步图像加载,缓存和显示。
(1).使用多线程加载图片
(2).灵活配置ImageLoader的基本参数,包括线程数、缓存方式、图片显示选项等;
(3).图片异步加载缓存机制,包括内存缓存及SDCard缓存;
(4).采用监听器监听图片加载过程及相应事件的处理;
(5).配置加载的图片显示选项,比如图片的圆角处理及渐变动画。
//第一种方法是去网上下载
地址:https://github.com/nostra13/Android-Universal-Image-Loader
//第二种就是可以依赖
compile 'com.nostra13.universalimageloader:universal-image-loader:1.9.3'
配置文件要设置网络权限
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
先建一个App类 继承Application (其中两种加载)
建好后必须要在配置文件内初始化(注册.App)
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//第一种是创建默认的加载 //创建默认的ImageLoaderConfiguration
ImageLoaderConfiguration configuration=ImageLoaderConfiguration.createDefault(this);
//初始化ImageLoader
ImageLoader.getInstance().init(configuration); //第二种是自定义加载
//自定义加载第三方图片样式
DisplayImageOptions options = new DisplayImageOptions.Builder()
.showImageOnLoading(R.drawable.image_nor) // 设置图片下载期间显示的图片
.showImageForEmptyUri(R.drawable.image_nor) // 设置图片Uri为空或是错误的时候显示的图片
.showImageOnFail(R.drawable.image_nor) // 设置图片加载或解码过程中发生错误显示的图片
.resetViewBeforeLoading(true) // default 设置图片在加载前是否重置、复位
.delayBeforeLoading(200) // 下载前的延迟时间
.cacheInMemory(true) // default 设置下载的图片是否缓存在内存中
.cacheOnDisk(true) // default 设置下载的图片是否缓存在SD卡中
.considerExifParams(false) // default
.imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default 设置图片以如何的编码方式显示
.bitmapConfig(Bitmap.Config.RGB_565) // default 设置图片的解码类型
// .displayer(new SimpleBitmapDisplayer()) // default 还可以设置圆角图片new RoundedBitmapDisplayer(20)
.displayer(new FadeInBitmapDisplayer(200))// 图片加载好后渐入的动画时间
// .displayer(new RoundedBitmapDisplayer(20)) // 设置成圆角图片
.handler(new Handler()) // default
.build(); //设置图片缓存路径
File cacheDir = StorageUtils.getCacheDirectory(this);
//自定义ImageLoaderConfiguration配置
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this)
.memoryCacheExtraOptions(480, 800) // default = device screen dimensions 内存缓存文件的最大宽、高
// .diskCacheExtraOptions(480, 800, null) // 本地缓存的详细信息(缓存的最大宽、高),最好不要设置这个
.threadPoolSize(4) // default 线程池内加载的数量
// .threadPriority(Thread.NORM_PRIORITY - 2) // default 设置当前线程的优先级
.tasksProcessingOrder(QueueProcessingType.FIFO) // default
.denyCacheImageMultipleSizesInMemory()
.memoryCache(new LruMemoryCache(2 * 1024 * 1024)) //可以通过自己的内存缓存实现
.memoryCacheSize(2 * 1024 * 1024) // 内存缓存的最大值
.memoryCacheSizePercentage(13) // default
//可以自定义缓存路径
.diskCache(new UnlimitedDiskCache(cacheDir))
.diskCacheSize(100 * 1024 * 1024) // 100 Mb sd卡(本地)缓存的最大值
// .diskCacheFileCount(100) // 可以缓存的文件数量
// default为使用HASHCODE对UIL进行加密命名, 还可以用MD5(new Md5FileNameGenerator())加密
.diskCacheFileNameGenerator(new HashCodeFileNameGenerator())
// .connectTimeout (5 s), readTimeout (30 s) //超时时间
//第二个参数:连接超时时间,第三个参数:读取超时时间
.imageDownloader(new BaseImageDownloader(this, 5 * 1000, 30 * 1000))
.defaultDisplayImageOptions(options)
.writeDebugLogs() // 打印debug log
.build(); //开始构建 //初始化ImageLoader
ImageLoader.getInstance().init(configuration); }
在activity应用 public class MainActivity extends AppCompatActivity { private String url; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); //初始化组件
GridView gridView= (GridView) findViewById(R.id.lv);
gridView.setAdapter(new ImageAdapter(this,ImageUrlArrays.IMAGE_URL_ARRAYS)); /* //初始化图片加载框架
final ImageLoader imageLoader = ImageLoader.getInstance();*/ //第一种加载方式 需要个url图片地址
url = "http://www.chinagirlol.cc/data/attachment/forum/201412/03/233758hw7o7h08kkozkcwi.jpg";
imageLoader.displayImage(ImageUrlArrays.IMAGE_URL_ARRAYS[8],imageView); /* //第二种加载方式
imageLoader.displayImage(url, imageView, new ImageLoadingListener() {
@Override //刚开始加载的图片
public void onLoadingStarted(String s, View view) {
imageView.setImageResource(R.drawable.image_nor);
} @Override //加载失败图片
public void onLoadingFailed(String s, View view, FailReason failReason) { } @Override//加载完成的图片
public void onLoadingComplete(String s, View view, Bitmap bitmap) {
imageView.setImageBitmap(bitmap);
} @Override//取消加载
public void onLoadingCancelled(String s, View view) { }
});*/ /* //第三种加载方式 设固定宽高
ImageSize imageSize=new ImageSize(140,160);
imageLoader.loadImage(ImageUrlArrays.IMAGE_URL_ARRAYS[10],imageSize,new SimpleImageLoadingListener(){
@Override
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {
super.onLoadingComplete(imageUri, view, loadedImage);
imageView.setImageBitmap(loadedImage);
}
});
*/
}
}
以上代码在以后的修改比较麻烦 所以我们可以自己在封装起来,变成自己的再用,方便修改
public class WXHLImageLoader { //懒汉单例
private static WXHLImageLoader wxhlImageLoader;
//获取第三方的ImageLoader
private ImageLoader imageLoader; private WXHLImageLoader(){
imageLoader = ImageLoader.getInstance();
} /**
* 单例
* @return
*/
public static synchronized WXHLImageLoader getInstance(){
// return wxhlImageLoader;
if(wxhlImageLoader == null){
wxhlImageLoader = new WXHLImageLoader();
}
return wxhlImageLoader;
} /**
* 显示图片
* @param imageUrl
* @param imageView
*/
public void displayImage(String imageUrl, ImageView imageView){
imageLoader.displayImage(imageUrl,imageView);
} /**
* 显示图片,带监听器的
* @param imageUrl
* @param imageView
*/
public void displayImage(String imageUrl, ImageView imageView,ImageLoadingListener listener){
imageLoader.displayImage(imageUrl,imageView,listener);
} /**
* 加载图片,带监听器的
* @param imageUrl
* @param listener
*/
public void loadImage(String imageUrl, SimpleImageLoadingListener listener){
imageLoader.loadImage(imageUrl,listener);
} /**
* 加载图片,带监听器的
* @param imageUrl
* @param listener
*/
public void loadImage(String imageUrl, int width, int height, SimpleImageLoadingListener listener){
ImageSize targetSize = new ImageSize(width, height); // result Bitmap will be fit to this size
imageLoader.loadImage(imageUrl,targetSize,listener);
} }
第三方的图片加载( Android-Universal-Image-Loader)的更多相关文章
- Android 框架修炼-自己开发高效异步图片加载框架
一.概述 目前为止,第三方的图片加载框架挺多的,比如UIL , Volley Imageloader等等.但是最好能知道实现原理,所以下面就来看看设计并开发一个加载网络.本地的图片框架. 总所周知,图 ...
- Android高效异步图片加载框架
概述 Android高效异步图片加载框架:一个高效的异步加载显示的图片加载框架,同时具备图片压缩,缓存机制等特性. 详细 代码下载:http://www.demodashi.com/demo/1214 ...
- Android开发三种第三方图片加载的框架
最近在项目中用到了大量图片加载,第三方优秀框架还不错,下面介绍三款榜首的框架用法和问题,做一个记录. 现在项目使用的是Android Studio开发的,现在也没有多少人使用Eclipse了吧. 一. ...
- Android开源库--Universal Image Loader通用图片加载器
如果说我比别人看得更远些,那是因为我站在了巨人的肩上. github地址:https://github.com/nostra13/Android-Universal-Image-Loader 介绍 ...
- Android中常见的图片加载框架
图片加载涉及到图片的缓存.图片的处理.图片的显示等.而随着市面上手机设备的硬件水平飞速发展,对图片的显示要求越来越高,稍微处理不好就会造成内存溢出等问题.很多软件厂家的通用做法就是借用第三方的框架进行 ...
- Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide
一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...
- Android图片加载库的理解
前言 这是“基础自测”系列的第三篇文章,以Android开发需要熟悉的20个技术点为切入点,本篇重点讲讲Android中的ImageLoader这个库的一些理解,在Android上最让人头疼是 ...
- Android图片加载与缓存开源框架:Android Glide
<Android图片加载与缓存开源框架:Android Glide> Android Glide是一个开源的图片加载和缓存处理的第三方框架.和Android的Picasso库类似,个人感觉 ...
- 一起写一个Android图片加载框架
本文会从内部原理到具体实现来详细介绍如何开发一个简洁而实用的Android图片加载缓存框架,并在内存占用与加载图片所需时间这两个方面与主流图片加载框架之一Universal Image Loader做 ...
随机推荐
- Spring事务传播属性
Spring 对事务控制的支持统一在 TransactionDefinition 类中描述,该类有以下几个重要的接口方法: int getPropagationBehavior():事务的传播行为 i ...
- zjuoj 3780 Paint the Grid Again
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3780 Paint the Grid Again Time Limit: 2 ...
- Ext.data.SimpleStore的使用方法
Ext.data.SimpleStore简单数据存储器 参数:data:Array数组类型.fields:数组对应的字段名称.var data1=[1,"订单1","16 ...
- 挂FORM时找不到对应的功能(function)
表单 功能都已经定义,但是在菜单中增加时候没有这个可选的项. 解决办法:由于是功能太多,LOV显示限制为30000,因此将功能名前加CUX,提升其排序即可.也可以修改LOV显示限制数量.
- 【转帖】ActiveX部件不能创建对象的终极解决方案
建一个批处理文件,内容如下: echo 正在修复,这个过程可能需要几分钟,请稍候-- rundll32.exe advpack.dll /DelNodeRunDLL32 %systemroot%Sys ...
- UVA 10054 the necklace 欧拉回路
有n个珠子,每颗珠子有左右两边两种颜色,颜色有1~50种,问你能不能把这些珠子按照相接的地方颜色相同串成一个环. 可以认为有50个点,用n条边它们相连,问你能不能找出包含所有边的欧拉回路 首先判断是否 ...
- virtualenv 安装 lxml
sudo apt-get install zlib1g-dev sudo apt-get install lib32z1-dev sudo apt-get install libxml2-dev li ...
- javascript: parse JSON
$.get("/intra/do/sequence_has_codonList.pl",function(data){ data = JSON.parse(data); // ar ...
- centos5安装salt-master
本篇文档主要解决2个问题: 1. centos5通过yum安装的master版本肯定低于centos6安装的minion,所以必须升级salt-master 2. zeromq版本太低会报这个错 20 ...
- php截取中文字符串乱码问题
一般情况下说到截取字符串我们都会想到substr 然而substr对英文字符串有不错的效果,但是中文可能就会报出各种各样的问题: 所以,我们要采用mb库里面的substr,也就是mb_substr() ...