Android第十六天图片加载框架

Android加载图片缓存原则:

Android对于内存一定要倍加的珍惜使用

图片在加载的时候一般采用

三级缓存原则:

 第一级 :内存 临时存贮

 第二级 :磁盘(文件/SD卡)持久化存储

 第三级 :网络 持久化

 当想要加载一张图片的时候,首先去内存中查找,这张图片是否存在,如果存在,则直接加载,如果不存在去磁盘中查找,如果磁盘中存在,则将图片加载到内存中,并且展示出来,如果磁盘中不存在,则从网络获取,当下载成功后,存入磁盘中一份,加载到内存中,并且展示出来。


 优势:1.加载更快捷

          2.节省流量开销

          3.减小服务器压力

一、Picasso - square公司出品。

    A powerful image downloading and caching library for Android
    

Picasso的主要特性:
1.自带内存和硬盘的二级缓存功能
2.加载本地资源、资产(assets)、SD卡 及COntentProvider中的图片
3.在Adapter中需要取消已经不在视野范围的ImageView 图片资源的加载,否则会导致图片错位,Picasso解决了这个错位的问题
4.使用图片压缩尽可能的减少内存消耗
5.图形转换操作,如变换大小,旋转等,提供了借口让用户可以自定义转换操作
Picasso的基本用法

倒入Picasso 框架依赖。

compile 'com.squareup.picasso:picasso:2.5.2'

基本语法:
Picasso在(with)当前上下文中加载(load)一张图片到(into)ImageView控件

1.加载资源图片
Picasso.with(Context).load(R.mipmap.ic_launcher).into(ImageView);
2.记载资产目录图片(assets)
Picasso.with(Context).load(“file:///android_asset/xixi.png”).into(ImageView);
3.加载SD卡的图片
Picasso.with(Context).load(new File(Path)).into(ImageView);
4.加载网络图片
Picasso.with(Context).load(url).into(ImageView);

属性方法设置:
1.设置占位图片
Picasso可以设置下载前和下载出错时的图像,在下载图像被设置前,Picasso会尝试三次请求,三次请求都失败会显示error
Picasso.with(Context).load(Url)
.placeholder(R.mipmap.ic_empty) //  默认图片占位图 
.error(R.mipmap.ic_launcher ) //图片加载失败的图片
      .into(ImageView)
2.设置无淡入淡出
.noFade();
3.图片重新调整大小
重新调整大小,一边更好的根据需求修改适配布局,减少存空间
.resize(width,height); // 宽高
.resizeDimen(targetWidthResId,targetHeightResid);dimen资源Id
4.图片裁切类型  
Picasso.with(Context).load(Url)
.centerCrop() //根据热 resize尺寸对 图片进行裁剪
.centerInside() //根据resize尺寸对图片进行等比例缩放 
.fit()
.into(ImageView);
<备注> :  centerCrop/centerInside()需要配合resize()使用,
fit  不能配合resize使用
5.自定义图形转换
图形转换,也是为了更好的适配布局和减少存储
.transform(new Transformation(){
@Override
public Bitmap  transform(Bitmap source){
int size =  Math.min(source.getWidth.source.getHeight);// 获取最小值
Bitmap  map =  Bitmap.createBitmap(source,x,y,size,size);//正方形
source.recycle();
return map;
}
@Override
public String key(){
return “cricle”;
}
})
6.图片旋转
Picasso.with(Context).load(url).rotate().into(ImageView);
7.设置图片质量,对于不透明的图片可以使用
.config(Bitmap.Config.RGB_565);
RGB_565 //  一个像素占据2个自己  显示效果较为清晰
ARGB_8888//  默认   一个像素占据4个字节
ARGB_4444//   一个像素占据2个字节   显示效果不是很清晰
ALPHA_8//  一个像素占据2个字节   显示效果不是很清晰
图片的像素格式:   很多个像素组成了一张图片
Bitmap.Config.ARGB_8888  1个像素点就是 8×4=  32位  /8  = 4(b  字节)
Bitmap.Config.ARGB_4444  1个像素点就是 4×4=  16位  /8  = 2(b  字节)
Bitmap.Config.RGB_565 1个像素点就是  5+6+5 = 16位 /8   =2(b 字节)
A R G B
A = alpha 透明度
R =  Red  红色
G =  Green  绿色
B =  Blue  蓝色
后面的尾数表示的是  8888  每个像素点占的位数

假设 有一张图片是  600× 800 大小 

如果像素格式是ARGB_8888    600×800×4 =  1920000  字节 =  1920kb =  1.857M
如果像素格式是ARGB_4444     600×800×2 =  960000 字节= 960kb = 0.9M

如果像素格式是RGB_565 600×800×2 = 960000 字节 =960kb = 0.9M

8.查看大图时放弃内存缓存memorycache
Picasso默认会使用设备的15%的内存作为内存图片缓存,且现有的API无法清空内存缓存。
在查看大图时放弃使用内存缓存,图片从网路下载完成后会自动缓存到磁盘中,加载会从磁盘中加载,这样可以加速内存回收
Picasso.with(Conetxt).load(url)
.memoryPolicy(MemoruPolicy.NO_CACHE,MemoryPolicy.NO_STORE)
.into(ImageView);
<备注> :NO_CACHE  是指图片加载跳过从内存缓存中查找
NO_STORE  是指图片存储时不往内存缓存存储
9. 设置tag标签 
设置网络请求的Tag
对于每次加载图片的时候,请求可以进行 一下三种动作(类似okHttp)
通过设置tag标签,可以用来pause、resume、cancel访问
Picasso.with(Context).pauseTag("”);
Picasso.with(Context).resumeTag("”);
Picasso.with(Context).cancelTag("”);
Application中常见的设置
初始化Picasso属性:
Picasso  picasso = newPicasso.Builder(this)
//设置内存缓存大小,10M
.memoryCache(new LruCache(10 << 20))
      //设置下载的图片格式,节省内存  默认时 ARGB_8888
.defaultBitmapConfig(Bitmap.Config.RGB_565)
//设置下载器,  默认是URLConnection
.downLoader(new UrlConnectionDownloader())
//
. downLoader(new OkHttpDownloader())
//设置调试标示 (图片左上角的三角形标记)
红色代表从网络获取的数据
蓝色代表从本地磁盘中获取的数据
绿色代表从内存中获取的数据
.indicatorsEnabled(true)
.build();
//设置Picasso单例模式
Picasso.setSingletonInstance(picasso);

二、Glide

       An image loading and caching library for Android focused on smooth scrolling

       Glide4.0及以上版本需要AndroidStudio3.0以上版本支持所以我们采用Glide3.6版本的Jar包

        倒入方式:

        

        然后选择:ProjectStructrue: 

        

进行添加jar包的配置:


然后继续选择:


然后就可以正常使用了。

语法与Picasso基本一致。

三、Universal-Image-Loader

倒入依赖方式,在Gradle文件里面添加

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

在使用ImageLoader前:

//初始化ImageLoader
ImageLoaderConfiguration configuration = new ImageLoaderConfiguration.Builder(this).build();
ImageLoader.getInstance().init(configuration);


使用:

//使用 ImageLoader加载图片
ImageLoader loader = ImageLoader.getInstance();
loader.displayImage(IMAGELOADER_IMAGE_URL, showIv);
//  参数配置
DisplayImageOptions options = new DisplayImageOptions.Builder().build();
 
//Loader 的监听器
loader.displayImage(IMAGELOADER_IMAGE_URL, showIv, options, new ImageLoadingListener() {
    @Override
   
public void onLoadingStarted(String imageUri, View view) {

    }

    @Override
   
public void onLoadingFailed(String imageUri, View view, FailReason failReason) {

    }

    @Override
   
public void onLoadingComplete(String imageUri, View view, Bitmap loadedImage) {

    }

    @Override
   
public void onLoadingCancelled(String imageUri, View view) {

    }
}, new ImageLoadingProgressListener() {
    @Override
   
public void onProgressUpdate(String imageUri, View view, int current, int total) {
    //监听进度
   
}
});



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值