一、前言:
对于Picasso,一直听别人讲他的好,我确一直没有机会好好用用, 在网上看了几篇Picasso的文章之后,自己用了用,打算写一个笔记,方便以后自己复习。
我在网上看过的资料:
(知识点)Picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加载:
就是它!
(重点) Picasso.with(context).load(url).into(imageView);
二、使用方法:
第一步,引入Picasso到项目:compile'com.squareup.picasso:picasso:2.5.2'(版本随意写了)
第二步,就是用刚才那个代码了:Picasso.with(context).load(url).into(imageView);
三、使用的好处:
大多用Picasso的场景一般都在adapter中用,因为在adapter中,就很容易出现加载内存消耗,错位的情况,那么在adapter中添加图片那就更容易出现一些意料外的状况:
1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位
2.使用复杂的图片压缩转换来尽可能的减少内存消耗
3.自带内存和硬盘二级缓存功能
四、操作语句:
1. 使用ListView,GridView的时候,自动检测Adapter的重用(re-use),取消下载,使用缓存。
@OverridepublicvoidgetView(intposition,ViewconvertView,ViewGroupparent){
SquaredImageViewview=(SquaredImageView)convertView;
if(view==null){
view=newSquaredImageView(context);
}
Stringurl=getItem(position);
Picasso.with(context).load(url).into(view);
}
2. 自动设置图片宽高像素大小:
Picasso.with(context)
.load(url)
.resize(50,50)
.centerCrop()
.into(imageView);
3.当然,我们也可以写自己的变换类,但是必须实现Transformation接口,如:
/**
* 自定义接口,实现图像缩小为原来的一半
*/
publicclassCropSquareTransformationimplementsTransformation {
@Override
publicBitmap transform(Bitmap source) {
intsize = Math.min(source.getWidth(), source.getHeight());
intx = (source.getWidth() - size) /2;
inty = (source.getHeight() - size) /2;
Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
if(result != source) {
source.recycle();
}
returnresult;
}
@Override
publicString key() {
return"square()";
}
}
然后设置transform方法就可以了:
Picasso.with(this).load("http://i.imgur.com/DvpvklR.png")
.transform(newCropSquareTransformation()).into(iv_test2);
4.Place holders-空白或者错误占位图片:picasso提供了两种占位图片,未加载完成或者加载发生错误的时需要一张图片作为提示。注意:如果加载发生错误会重复三次请求,三次都失败才会显示erroPlace holder
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
5.资源文件的加载:除了加载网络图片picasso还支持加载Resources, assets, files, content providers中的资源文件。
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load(newFile(...)).into(imageView2);
到这里基本上就可以正常的使用Picasso了,对于初级或者刚接触图片加载这块的小伙伴来说,很多麻烦的问题就不用自己去考虑,跟着大神的脚步走,我这只菜鸟也算完成任务了。
想知道原理的小伙伴都是爱学习的小伙伴,可以看一下Picasso原理分析。
网友评论