第三方的图片加载( 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做 ...
随机推荐
- 在Sublime中编辑批处理并运行
在Sublime->Tool->Build System -> New Build System 复制如下代码名保存为 CMD.sublime-build { "cmd&q ...
- csuoj 1119: Collecting Coins
http://acm.csu.edu.cn/OnlineJudge/problem.php?id=1119 1119: Collecting Coins Time Limit: 3 Sec Memo ...
- HDU-1233 还是畅通工程
Problem Description 某省调查乡村交通状况,得到的统计表中列出了任意两村庄间的距离.省政府“畅通工程”的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能 ...
- Eclipse 恢复删除的文件
这件事发生在,两周以前,那时我正在写LLT,补充完代码覆盖率.突然,我的代码呢,我的代码去哪里了?由于对Eclipse还不太熟悉,代码就则样被我从磁盘删掉了.然后火速给同事打电话,同事说如果删除了,而 ...
- MXNet学习~第一个例子~跑MNIST
反正基本上是给自己看的,直接贴写过注释后的代码,可能有的地方理解不对,你多担待,看到了也提出来(基本上对未来的自己说的),三层跑到了97%,毕竟是第一个例子,主要就是用来理解MXNet怎么使用. #导 ...
- android 图片压缩
引用:http://104zz.iteye.com/blog/1694762 第一:我们先看下质量压缩方法: private Bitmap compressImage(Bitmap image) { ...
- cento下安装elasticsearch2.4.2小记
1.首先需要安装好java,并配置好环境变量 2.下载elasticsearch的rpm包,命令如下: wget https://download.elastic.co/elasticsearch/r ...
- 【unity3d游戏开发脚本笔记之一:坐标系选择对物体运动的影响】
时间:2016年9月24日17:38:21 作者:yexiaopeng 博客园 在unity3d的世界中,其坐标系可分为四种,世界坐标系-WorldSpace 本地坐标系-LocalS ...
- uexGaodeMap插件Android接入指引
uexGaodeMap插件Android接入指引 高德地图插件是基于高德地图API封装的AppCan平台的插件模块.开发者集成及使用此插件,需要到高德开放平台为应用申请相应的APIKey,并将APIK ...
- 用最基本的EF+MVC+JQ+AJAX+bootstrap实现权限管理的简单实例 之登陆和操作权限
先来一堆关于上篇文章的废话(不喜者点此隐藏) 今天把博客加了个小功能,就是点标题可以隐藏或展示相关内容,做法很傻,就是引用了bootstrap的两个css类和全部的js文件,其实这样的小功能完全应该自 ...