Picasso一行代码就搞定

一、前言:

       对于Picasso,一直听别人讲他的好,我确一直没有机会好好用用, 在网上看了几篇Picasso的文章之后,自己用了用,打算写一个笔记,方便以后自己复习。

       我在网上看过的资料:

       Picasso-强大的图片缓存库

      Android图片下载缓存库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原理分析。

你可能感兴趣的:(Picasso一行代码就搞定)