jar包地址:http://square.github.io/picasso/#download
教程一
参考:http://blog.csdn.net/smallcheric/article/details/51049638
从Android Resource 、File、URI、网络加载图片
教程二
参考:http://blog.csdn.net/smallcheric/article/details/51050399
Picasso支持ListView和GridView图片加载
cancelRequest:
取消网络请求
placeHolder
:未完成加载时图片默认展示
error
:加载错误是图片默认展示
教程三
参考:http://blog.csdn.net/smallcheric/article/details/51055013
noFace:取消图片转换时的渐变效果
noPlaceHolder:取消未完成加载时图片默认展示(避免多次变化图片时显示初始图片体验下降)
resize:自定义图片大小
onlyScaleDown:与resize配合使用,如果加载的大小比resize大,那么直接加载resize大小,不再重新计算
centerCrop:与resize配合使用,图片会被剪切,但是图片质量看着没有什么区别
centerInside:
与resize配合使用,
图片会被完整的展示,可能图片不会填充满
ImageView`,也有可能会被拉伸或者挤压
fit最佳显示图片,减少内存,不影响图片质量
priority:设置图片加载优先级,默认是先加载较小的图片,但如果需要按顺序加载,需要设置优先级(Picasso.Priority.HIGH/MIDDLE/SMALL 默认MIDDLE)
tag:传递的值是当前的上下文,在一个
ListView
的子item
中加载一张图片是很常见的,这些图片都来源于网络请求,如果这个listview
有上千条数据,当用户快速滑动的时候,每个item会不断的被复用,当然Picasso的请求也不断地进行请求,取消请求,再次请求,再次取消的操作(对屏幕外的自动取消请求),添加tag,可以在用户在快速滑动的时候全部停止请求,只有在滑动停止时再去请求。
需要设置listview的scrolllistener,在滚动发送变化的时候对图片的请求统一做处理。
上下文默认会获取全局ApplicationContext,即使传递的是activity,也会去获取
全局ApplicationContext
。
picasso支持自定义notification的使用
fetch taget get 参考连接
教程四
rotate:对图片进行旋转
transform:支持自定继承Trasformation,实现加载图片的不同效果
memoryPolicy:负责内存缓存
NO_CACHE:让Picasso跳过从内存中读取图片这一操作
NO_STORE:如果你的图片只加载一次就没用了,就调用该值,这样的话Picasso就不会在内存及本地进行缓存了
networkPolicy:负责本地缓存
NO_CACHE:让Picasso跳过从本地读取资源这一过程
NO_STORE:让Picasso不进行本地图片缓存
内部遵从最近最少使用算法。
setIndicatorsEnable:设置为true时,可以在加载的图片左上角看到一个小三角(绿色代表内存获取,蓝色代表本地获取,红色代表网络加载)
根据颜色的提示,测试结果表明,memoryPolicy和networkPolicy建议一起使用
两个都NO_CACHE和NO_STORE时,网络获取,两个都NO_CACHE,网络获取。
两个都NO_STORE,内存获取。
什么都不加,内存或本地,看你性能了。
另外po一下别人爬的缓存位置的链接:http://blog.csdn.net/u014592587/article/details/47070075
cache: /data/data/package-name/cache/picasso-cache
file:/data/data/package-name/files/
cache的目录是通过Utils中的createDefaultDir函数找到的,运行后发现该目录下还有files应该是本地缓存的地址,不过这个文件只找到了一个Instant-run,本地怎么缓存还没有完全理解。
自定义缓存地址:
上面的链接有写,不过编译的时候没通过,因为找不到okHttpClient,我看了一下jar里面是没有这个类的,只在pom.xml里面申请了,所以只能暂时认为是环境连不上谷歌还是什么的,反正工作环境这边用as都必须使用jar包,不能直接在manifest.xml里面写网址申明,有研究的麻烦回答一下o((⊙﹏⊙))o.
怎么删除缓存?
一种方式是:
Picasso.with(getActivity()).invalidate(file);
file默认picasso用之前那个缓存的地址,如果是自定义的话,用自定义的地址。
测试下来,我在ondDestory的地方清了一次,然后,picasso-cache目录下的文件并没有减少。
另一种
链接:http://stackoverflow.com/questions/27502659/clear-cache-memory-of-picasso
这个是设置memoryPolicy是NO_CACHE和NO_STORE,onDestory的时候检查目录依旧文件没有减少,不过三角标志保持是蓝色,也就是本地加载,所以内存是肯定没有了(因为压根就跳过了内存读取和保存),总而言之picasso的缓存是个谜,怎么删干净也是个谜。让我们姑且相信底层的okHttp(没起来),HttpUrlConnection能够处理好缓存的问题,还有他的最近最少使用算法。
教程五
参考:http://blog.csdn.net/smallcheric/article/details/51056212
自定义picasso相关
DownLoader相关
自定义URI请求
部分源码解析
参考:http://blog.csdn.net/SmallCheric/article/details/51061853
介绍和加载图片语句
Picasso.with(content).load(url).into(imageView);
相关的三个部分with(content)、load(url)、into(imageView)
with(content)基于单例模式和建造者模式,初始化了流程和一些必须创建的类
缓存使用了LinkedHashMap
,划分最大堆内存值的百分之15,每次调用set方法进行缓存都会计算当前可使用大小,超出范围会删掉之前保存的数据。
线程池默认wifi
下为4个线程,4G
状态为3个线程,3G
状态下为2个线程,2G
状态下为1个线程.
自定义和源码部分还未理解,未完待续。。。