先扯下淡,还记得前年下半年的时候我开始接触并使用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参考:图片加载框架-Picasso最详细的使用指南