先扯下淡,还记得前年下半年的时候我开始接触并使用Glide。
使用Glide的原因很简单,网络上各种夸Glide怎么怎么好,比如加载图片省内存,比如可以加载GIF图片,谷歌推荐使用等等。可是现在我又发现一个比较怪异的现象,网上大批的人开始说picasso怎么怎么好了,比如内存也可以很小,而且包小方法数少,可以减少发生64k的问题。
先说说我当时使用glide的时候发生的问题,比如缓存到本地的图片根本取不到,如果想自己再次使用,就需要对原来的代码进行修改,比如把图片的路径存到集合里,手动再去调用这个集合(一年前)。
再比如图片RAGB值的改变,只能通过全局来改变,但是我经常遇到需要切换的问题(用默认的话-如白底的图片会背景会一些黄色很难看)就不能很好的切换等等。
说了那么多为的就是证明我不是一个随波逐流的人哈哈…….
下面我们就来看看picaso API的一个小总结
第一添加依赖
compile 'com.squareup.picasso:picasso:2.5.2'
第二简单使用
Picasso.with(this).load("http://www.haha.cn/large/aaaa.jpg").into(mImageView);
第一个参数 上下文
第二个参数 图片地址 或者 file 或者uri
第三个参数 显示的imageview
第三API
//加载默认图片
.placeholder(R.drawable.default_bg)
//加载图片失败时显示的图片
.error(R.drawable.error_iamge)
//设置图片的尺寸
.resize(400,200)
//从配置文件读取宽高
.resizeDimen(R.dimen.image_width,R.dimen.image_height)
//设置图片的尺寸必须小于原图片的尺寸
.onlyScaleDown()
//图片裁剪和imageview的ScalType一个意思
.centerCrop()
//将整张图片完全展示但是图片大小不能小于imageview的大小
.centerInside()
//自动帮我们测理view的大小然后调用resize方法,但view宽高必须固定
.fit()
//旋转图片 .rotate(180,200,100) 后两个是圆心位置
.rotate(180)
//可以对图片进行转换 缩放 蒙版 形状 需要implements Transformation
transform(new Transformation(this))
//设置图片加载的优先级有三种优先级,LOW、NORMAL、HIGH 默认没选,调用fetch是最低的
//跳过内存缓存
//NO_CACHE:表示处理请求的时候跳过检查内存缓存
//NO_STORE: 表示请求成功之后,不将最终的结果存到内存
.memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE)
.networkPolicy(NetworkPolicy.NO_CACHE)//跳过磁盘缓存
//添加标签
tag("PhotoTag")
cancelTag(Object tag) //取消设置了给定tag的所有请求
pauseTag(Object tag) //暂停设置了给定tag 的所有请求
resumeTag(Object tag) //resume 被暂停的给定tag的所有请求
//获取图片比起glide方便多了
Bitmap bitmap = Picasso.with(this).load(URL).get();
第四 构建局部实例 我们直接调用的话是全局实例
Picasso.Builder builder =newPicasso.Builder(this);
//构造一个Picasso
Picasso picasso = builder.build();
//加载图片
picasso.load(URL)
.into(mImageView);
第五 配置自定义下载器 downLoader
public class CustomDownloader implements Downloader {
@Override
public Response load(Uri uri, int networkPolicy) throws IOException {
return null;
}
@Override
public void shutdown() {
}
}
//配置下载器
builder.downloader(new CustomDownloader());
//构造一个Picasso
Picasso picasso = builder.build();
第六配置缓存
// 设置缓存大小
LruCache cache = new LruCache(5*1024*1024);
builder.memoryCache(cache);
第七配置线程池
//配置线程池
ExecutorServiceexecutorService=Executors.newFixedThreadPool(8);
builder.executor(executorService);
第八配置全局的 Picasso Instance
我们希望我们的这些自定义配置能在整个项目都应用上,并且只配置一次
setSingletonInstance