美文网首页
Picasso一行代码就搞定

Picasso一行代码就搞定

作者: 这个美嘉不姓陈 | 来源:发表于2017-06-28 16:09 被阅读0次

    一、前言:

           对于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一行代码就搞定

          本文链接:https://www.haomeiwen.com/subject/jleucxtx.html