强大的图片加载框架Picasso和Glide

来源:互联网 发布:发那科pmc编程说明 编辑:程序博客网 时间:2024/05/16 12:58

一、Picasso

Picasso是Square公司出品的一个强大的图片下载和缓存图片库。官方网址是:http://square.github.io/picasso/

只需要一句代码就可以将图片下载并设置到ImageView上。

特点:

   1.在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题

   2.使用复杂的图片压缩转换来尽可能的减少内存消耗

   3.自带内存和硬盘二级缓存功能

简单加载实例:

public class MainActivity extends AppCompatActivity {    private ImageView mImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        mImageView = (ImageView) findViewById(R.id.image);        //加载网络图片     //   Picasso.with(this).load("http://i.imgur.com/DvpvklR.png").into(mImageView);        //加载本地图片     //   Picasso.with(this).load(R.drawable.mg2).into(mImageView);        //转换图片进行裁剪     //   Picasso.with(this).load("http://i.imgur.com/DvpvklR.png").resize(200,200).centerCrop().into(mImageView);        /**         * Place holders-空白或者错误占位图片         * error:错误占位符         *  如果加载发生错误会重复三次请求,三次都失败才会显示error Place holder         */        Picasso.with(this).load("http://i.imgur.com/DvpvklR.png").placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mImageView);    }}
Adapter中下载:使用ListView,GridView的时候,自动检测Adapter的重用(re-use),取消下载,使用缓存。

@Override public void getView(int position, View convertView, ViewGroup parent) {  SquaredImageView view = (SquaredImageView) convertView;  if (view == null) {    view = new SquaredImageView(context);  }  String url = getItem(position);  Picasso.with(context).load(url).into(view);}


二、Glide

在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech。这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app。

Picasso和Glide都在jcenter上。在项目中添加依赖非常简单。

compile 'com.squareup.picasso:picasso:2.5.2'compile 'com.github.bumptech.glide:glide:3.7.0'
Glide加载图片实例:

public class MainActivity extends AppCompatActivity {    private ImageView mImageView;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        init();    }    private void init() {        mImageView = (ImageView) findViewById(R.id.image);        //加载网络图片      //  Glide.with(this).load("http://i.imgur.com/DvpvklR.png").into(mImageView);        //加载本地图片      //  Glide.with(this).load(R.drawable.mg2).into(mImageView);     //   Glide.with(this).load("http://i.imgur.com/DvpvklR.png").placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mImageView);        Glide.with(this).load("http://i.imgur.com/DvpvklR.png").placeholder(R.mipmap.ic_launcher).crossFade().into(mImageView);    }
Glide和Picasso非常相似,Glide加载图片的方法和Picasso如出一辙。虽然两者看起来一样,但是Glide更易用,因为Glide的with方法不光接受Context,还接受Activity 和 Fragment,Context会自动的从他们获取。同时将Activity/Fragment作为with()参数的好处是:图片加载会和Activity/Fragment的生命周期保持一致,比如Paused状态在暂停加载,在Resumed的时候又自动重新加载。所以我建议传参的时候传递Activity 和 Fragment给Glide,而不是Context。另外,Glide加载的图片质量要差于Picasso,这是因为Glide默认的Bitmap格式是RGB_565 ,比ARGB_8888格式的内存开销要小一半。

下面是用Picasso和Glide加载同一张图片的效果差别:

Picasso:      Glide:

本地图片:

    

Picasso裁剪图片:


0 0
原创粉丝点击