android imageloader 进度条,Android-Universal-Image-Loader使用介绍

2023-10-26

图片开源库是一个应用非常广泛的第三方库,几乎所有的应用都会使用。目前而言常见的图片库有:Android-Universal-Image-Loader,Picasso,Fresco,Glide等,下面是国内Top500Android应用分析报告中对图片开源库使用情况的统计表

c2e04c04dec6ImageLoader使用比例

由此可见在国内应用中,UIL是使用最广泛的图片开源库。接下来就简单介绍这个UIL的基本使用,该项目的Github地址链接:https://github.com/nostra13/Android-Universal-Image-Loader

一.UIL的功能特性

1、多线程异步加载和显示图片(网络图片、sd卡、资源文件(asset,mipmap等,不能加载9patch),新增加载视频缩略图)

2、支持加载过程的监听,可以暂停加载图片,在经常使用的ListView、GridView中,可以设置滑动时暂停加载,停止滑动时加载图片(便于节约流量,在一些优化中可以使用)

3、高度可定制化(可以根据自己的需求进行各种配置,如:线程池,图片下载器,内存缓存策略等)

4、支持图片的内存缓存,SD卡(文件)缓存

执行原理:每一个图片的加载和显示任务都运行在独立的线程中,除非这个图片缓存在内存中,这种情况下图片会立即显示。如果需要的图片缓存在本地,他们会开启一个独立的线程队列。如果在缓存中没有正确的图片,任务线程会从线程池中获取,因此,快速显示缓存图片时不会有明显的障碍。(别人那边借鉴的这段)

流程图:

c2e04c04dec6

二、使用方法

1、Include library

我们都知道使用第三方库的第一步就是引入jar文件,这里有如下几种方式来引入jar文件。

1)、 下载jar文件并拷入lib文件夹。Download JAR

2)、Maven dependency:

c2e04c04dec6

3)、Gradle dependency:

compile'com.nostra13.universalimageloader:universal-image-loader:1.9.5'

2、添加相关权限,一般为访问网络的权限和访问内存的权限

3、下面我们就来开始看如何使用这个图片异步加载库:

1)、先要配置ImageLoaderConfiguration这个类实现全局ImageLoader的实现情况。

一般在Application中初始化设置该类。

//获取缓存文件

File cacheDir = StorageUtils.getCacheDirectory(this);

//设置自定义缓存的目录

cacheDir = StorageUtils.getOwnCacheDirectory(this,"imageloader/Cache");

//初始化ImageLoad

ImageLoaderConfiguration config =newImageLoaderConfiguration.Builder(this)

.memoryCacheExtraOptions(480,800)//设置缓存图片的默认尺寸,一般取设备的屏幕尺寸

.diskCacheExtraOptions(480,800, null)

.threadPoolSize(3)// 线程池内加载的数量,default = 3

.threadPriority(Thread.NORM_PRIORITY-2)

.tasksProcessingOrder(QueueProcessingType.FIFO)

.denyCacheImageMultipleSizesInMemory()

.memoryCache(newLruMemoryCache(2*1024*1024))//自定义内存的缓存策略

.memoryCacheSize(2*1024*1024)

.memoryCacheSizePercentage(13)// default

.diskCache(newUnlimitedDiskCache(cacheDir))// default

.diskCacheSize(50*1024*1024)

.diskCacheFileCount(100)//缓存的文件数量

.diskCache(newUnlimitedDiskCache(cacheDir))//自定义缓存路径

.diskCacheFileNameGenerator(newHashCodeFileNameGenerator())// default

.imageDownloader(newBaseImageDownloader(this))// default

.imageDecoder(newBaseImageDecoder(true))// default

.defaultDisplayImageOptions(DisplayImageOptions.createSimple())// default

.writeDebugLogs()

.build();

以上的配置看个人需求进行选择,不是所有都要进行配置。

配置好ImageLoaderConfiguration后,调用以下方法来实现初始化

ImageLoader.getInstance().init(config);

2)、加载图片

在使用ImageLoader进行图片加载的时候,先要实例化ImageLoader,在每个布局里面都要实例化后再使用,实例化的方法有如下几种:

protectedImageLoader imageLoader = ImageLoader.getInstance();

之后进行显示的图片的各种格式DisplayImageOptions的设置:

mOptions=newDisplayImageOptions.Builder()

.showImageOnLoading(R.mipmap.ic_launcher)//设置图片在下载期间显示的图片

.showImageForEmptyUri(R.mipmap.ic_launcher)//设置图片Uri为空或是错误的时候显示的图片

.showImageOnFail(R.mipmap.ic_launcher)//设置图片加载/解码过程中错误时候显示的图片

.cacheInMemory(true)//设置下载的图片是否缓存在内存中

.cacheOnDisk(true)//设置是否缓存在SD卡中

.considerExifParams(true)//是否考虑JPEG图像EXIF参数(旋转,翻转)

.imageScaleType(ImageScaleType.EXACTLY_STRETCHED)//设置图片的缩放类型

.bitmapConfig(Bitmap.Config.ARGB_4444)//设置图片的解码类型

//.decodingOptions(null) //设置Bitmap的配置选项

.resetViewBeforeLoading(true)//设置图片在下载前是否重置,复位

.displayer(newRoundedBitmapDisplayer(100))//是否设置为圆角,弧度为多少

.displayer(newFadeInBitmapDisplayer(100))//是否图片加载好后渐入的动画时间

.build();

在上面配置中,并不是所有的配置都是我们需要的,在实际使用中我们只需要配置我们需要的就可以,下面简单介绍两个最常用的配置:

imageScaleType(ImageScaleType imageScaleType)是设置图片的缩放方式,其中缩放方式有如下几种:

EXACTLY :图像将完全按比例缩小的目标大小

EXACTLY_STRETCHED:图片会缩放到目标大小完全

IN_SAMPLE_INT:图像将被二次采样的整数倍

IN_SAMPLE_POWER_OF_2:图片将降低2倍,直到下一减少步骤,使图像更小的目标大小

NONE:图片不会调整

displayer(BitmapDisplayer displayer)是设置图片的显示方式

显示方式displayer:

RoundedBitmapDisplayer(introundPixels)设置圆角图片

FakeBitmapDisplayer()这个类什么都没做

FadeInBitmapDisplayer(intdurationMillis)设置图片渐显的时间

SimpleBitmapDisplayer()正常显示一张图片

3)、使用ImageLoad来显示图片

(1). 加载一张网络图片

ImageLoader.getInstance().displayImage(imageUrl, imageView);

(2)、加载一张网络图片并自定义配置

ImageLoader.getInstance().displayImage("http://img5.imgtn.bdimg.com/it/u=3218480149,1328367548&fm=21&gp=0.jpg",mImageView,mOptions);

(3)、加载一张图片并对图片的加载过程进行监听

ImageLoader.getInstance().displayImage("http://img5.imgtn.bdimg.com/it/u=3218480149,1328367548&fm=21&gp=0.jpg",mImageView2,mOptions, newImageLoadingListener() {

@Override

public voidonLoadingStarted(String imageUri,View view) {

//开始加载

}

@Override

public voidonLoadingFailed(String imageUri,View view,FailReason failReason) {

//加载失败

}

@Override

public voidonLoadingComplete(String imageUri,View view,Bitmap loadedImage) {

//加载完成

}

@Override

public voidonLoadingCancelled(String imageUri,View view) {

//取消加载

}

});

(4)、图片加载时候,带监听又带加载进度条的情况调用:

imageLoader.displayImage(imageUrl, imageView, options,newImageLoadingListener() {

@Override

publicvoidonLoadingStarted() {

//开始加载的时候执行

}

@Override

publicvoidonLoadingFailed(FailReason failReason) {

//加载失败的时候执行

}

@Override

publicvoidonLoadingComplete(Bitmap loadedImage) {

//加载成功的时候执行

}

@Override

publicvoidonLoadingCancelled() {

//加载取消的时候执行

},newImageLoadingProgressListener() {

@Override

publicvoidonProgressUpdate(String imageUri, View view,intcurrent,inttotal) {

//在这里更新 ProgressBar的进度信息

}

});

三、注意事项

1、ImageLoaderConfiguration必须配置并且全局化的初始化这个配置ImageLoader.getInstance().init(config); 否则会出现错误提示

2、ImageLoader是根据ImageView的height,width确定图片的宽高。

3、如果经常出现OOM(官方的建议)

①减少配置之中线程池的大小,(.threadPoolSize).推荐1-5;

②使用.bitmapConfig(Bitmap.config.RGB_565)代替ARGB_8888;

③使用.imageScaleType(ImageScaleType.IN_SAMPLE_INT)或者 try.imageScaleType(ImageScaleType.EXACTLY);

④避免使用RoundedBitmapDisplayer.他会创建新的ARGB_8888格式的Bitmap对象;

⑤使用.memoryCache(new WeakMemoryCache()),不要使用.cacheInMemory();

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

android imageloader 进度条,Android-Universal-Image-Loader使用介绍 的相关文章

随机推荐

  • 爬虫之二手车

    import requests from lxml import etree headers User Agent Mozilla 5 0 Windows NT 10 0 Win64 x64 AppleWebKit 537 36 KHTML
  • 更改docker容器中的时间而不影响宿主机

    容器的时间问题 如果想要直接进入容器 使用date s修改日期 则会出现一个date cannot set date Operation not permitted的错误 而且也不会成功 这是由于docker容器的隔离是基于Linux的Ca
  • tensorflow 多GPU编程 完全指南

    人生苦短 我用pytorch 推荐大家使用 PyTorch分布式训练简明教程 PyTorch分布式训练基础 DDP使用 知乎 主要变动的位置包括 1 启动的方式引入了一个多进程机制 2 引入了几个环境变量 3 DataLoader多了一个s
  • 5折交叉验证的回归分析

    w lt read csv C Users Administrator Desktop mg csv header T 样本的个数为1385 5折交叉验证 n 1385 zz1 1 n zz2 rep 1 5 ceiling 1385 5
  • PTA 7-15 计算圆周率 (15 分)

    根据下面关系式 求圆周率的值 直到最后一项的值小于给定阈值 2 1 31 3 52 3 5 73 3 5 7 2n 1 n 输入格式 输入在一行中给出小于1的阈值 输出格式 在一行中输出满足阈值条件的近似圆周率 输出到小数点后6位 输入样例
  • 音视频基础(1)音视频处理流程

    文章目录 音视频基础 1 音视频处理流程 1 概要 2 音频处理流程 3 视频处理流程 4 直播客户端处理流程 5 音频数据流转 音视频基础 1 音视频处理流程 理解音频处理流程对我们做音视频开发至关重要 因为理解了这个处理流程之后 我们就
  • mysql用户授权

    mysql用户授权 1 grant授权 授权 添加用户并设置权限 命令格式 grant 权限列表 on 库名 表名 to 用户名 客户端地址 identified by 密码 with grant option with grant opt
  • draw.io环境搭建

    为什么80 的码农都做不了架构师 gt gt gt 前言 draw io是一款在github上的开源产品 由于需要构建在线文档 需要插入画图类型 对比多款开源产品 最终选择了draw io draw io图标资源非常的丰富 方便导入图标资源
  • Android——(高级控件下拉框与搜索框)

    1 高级控件与低级控件区别 是否使用适配器 2 适配器种类和作用 2 1 种类 数组适配器 ArrayAdapter new ArrayAdapter
  • MySQL - java链接mysql8 并兼容链接mysql5 亲测可用

    开始之前先去官网捋一遍 MySQL Connector J开发人员指南 看看官方的一些变动 和一些可能要注意的点 或者一些可能会踩到的坑 事先 我们要有一个使用mysql5 x的应用或者服务 需要修改的部分不算多 但是要想同时想兼容5 x和
  • java: cannot find symbol symbol: variable log

    使用Intellij idea的时候 编译项目始终报错java cannot find symbol symbol variable log 装Lombok Plugin 插件 设置 build execution deployment g
  • react-redux库

    安装react redux tnpm i react redux 未优化前 src components Count index tsx import React useState from react export default fun
  • UE4命令行打包项目

    RunUAT bat在ue安装路径找 1 Compiling the client 编译客户端的命令行代码 RunUAT BuildCookRun project full project path and project name upr
  • MySQL 命令环境变量设置方法

    安装完MySQL之后 大家可以直接打开MySQL的client输入命令 操作MySQL数据库 当然也可以使用dos窗口输入MySQL命令操作MySQL数据库 方法1 1 打开dos窗口 具体怎么打开 百度 2 定位到MySQL安装目录下的b
  • jmeter生成随机数

    打开函数助手 Random 写入随机范围的最小值 和最大值 name of variable in which to store the result 为变量名 写好后 点击生成 复制字符串 粘贴到需要的请求上即可
  • linux查看vlan命令,[转]linux VLAN配置(vconfig)

    1 安装vlan vconfig 和加载8021q模块 aptitude install vlan modprobe 8021q 2 使用linux vconfig命令配置vlan vconfig add eth0 100 vconfig
  • 网络安全——cobalt Strike 之office钓鱼

    一 office钓鱼 在无需交互 用户无感知的情况下 执行office文档中内嵌的恶意代码 例如宏 从远控地址中下载并运行恶意可执行程序 例如远控木马 勒索病毒等 cobalt strike office钓鱼原理 主要生成一段vba代码 然
  • 前端发送的form-data类型name=“carNumber“的参数后端怎么接收

    需求 前端将图片和其他信息一起已form data类型发送给后端 图片以二进制流的形式 其他信息以key value的键值对的形式 举例 具体荷载 后端controller层接收的方法 RequestMapping value upload
  • linux安装jdk8

    1 官网下载链接 Java Downloads Oracle 2 下载完成之后 我们打开linux 执行如下命令 最后通过rz命令将文件上传 root localhost local mkdir usr local java root lo
  • android imageloader 进度条,Android-Universal-Image-Loader使用介绍

    图片开源库是一个应用非常广泛的第三方库 几乎所有的应用都会使用 目前而言常见的图片库有 Android Universal Image Loader Picasso Fresco Glide等 下面是国内Top500Android应用分析报