第三方的图片加载( 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做 ...
随机推荐
- 前端安全配置之Content-Security-Policy(csp)
什么是CSP CSP全称Content Security Policy ,可以直接翻译为内容安全策略,说白了,就是为了页面内容安全而制定的一系列防护策略. 通过CSP所约束的的规责指定可信的内容来源( ...
- servlet获取参数时,request.getParameter("id")参数获取失败
servlet获取参数时,request.getParameter("id")参数获取失败,这里的参数是“index”里面href中的参数 要注意,取不到值,是不是要取的参数有没有 ...
- PeopleSoft Home Subdirectories
PeopleSoft Home Subdirectories appserv — home to the Application Server and Process Scheduler Server ...
- [转]asp三级select菜单联动(加数据库)
'数据库结构'类别1表名称:a 字段:ID,Name 说明:ID为主键是类别1的ID值,Name为类别1的名称'类别2表名称:aa 字段:ID,aID,Name 说明:ID为主键是类别2的ID值,aI ...
- 《玩转D语言系列》二、D语言现状、基本规定和相关资源介绍
这算是本系列文章的一个序吧,主要是为以后的学习做铺垫,文本分为三个部分,第一部分是对于网上一些比较旧的资料的问题的一些更正,当然我也不可能看过所有的资料,难免会有遗漏.第二部分是D语言最基本的规定,第 ...
- java实现甘特图的2种方法:SwiftGantt和Jfree (转)
http://blog.sina.com.cn/s/blog_50a7c4a601009817.html 第一种方法使用SwiftGantt实现甘特图(进度图推荐这个) import java.a ...
- php用正则检测某字段开头是否为字母
//判断数组都已字段的开头是否为字母 $data=array(); for($i=0;$i<$length;$i++){ //是,则把数组重新取出赋值if (preg_match(" ...
- cherrypy应用探究
1. cherrypy是什么? cheerypy是一个有pythonic特性的面向对象的http服务框架. 玩python的人都应该知道pythonic这个单词.python大神给我们的建议 : &g ...
- python之在线PK游戏(第六天)
本节作业: 熟练使用类和模块,写一个交互性强.有冲突的程序. 故本次写了一个文字回合制的PK游戏,系统主程序为根目录下的:game_menu.py 1. 系统功能模块: 第六天的作业:文字游戏程序 ...
- CodeSmith 介绍
代码生成器作用 中国有句古语叫做“工欲善其事,必先利其器”,用通俗的话来说就是“磨刀不误砍柴功”,古人的这些话告诉我们:要把事情做好,事先应该准备合适的工具.工具不仅仅包括器具, 还包括思想.理论.经 ...