Picasso的使用及原理详解

A powerful image downloading and caching library for Android


Picasso是一个为安卓设计的强大的图片下载以及缓存的开源框架,之前很多项目会为加载图片而发愁,又是不清晰,又是oom。今天才发现这个框架,真的功能强大,而且使用非常简单。话不多说,下面就先说一下他的作用,再说如何使用,然后再讲详细原理。

以下是这个框架的官方网站以及github地址:

http://square.github.io/picasso/

https://github.com/square/picasso

Picasso的作用:

Many common pitfalls of image loading on Android are handled automatically by Picasso:

  • Handling ImageView recycling and download cancelation in an adapter.
  • Complex image transformations with minimal memory use.
  • Automatic memory and disk caching.
在安卓中许多常见的加载图片的陷阱都会被自动的处理通过Picasson库:

我们加载图片无非就是以下几个难点:

1.图片回收,以及adapter的图片加载。它都可以帮你自动处理和取消下载

2.用最小的内存去处理复杂的图片转换。比如图片要处理图片为圆形图片,图片要旋转一个角度等。都可以通过一个代码来帮助你完成。

3.可以自动的设置内存和本地缓存。

4.Picasso还提供了debug的标示,设置为true,他会明确标示出图片是从内存加载还是从本地磁盘或者是网络加载过来。

总之,它的作用就是帮你处理一些加载图片遇到的一些问题,他最主要的作用是加载从网络上下载的图片,但是他也同样提供了本地图片加载的功能。

Picasso的特征以及用法:

1.适配器的下载

自动识别适配器并且重用,取消之前的下载任务。

@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);
}
2.图形的转换

转换图片来更好的适应布局,并且减少内存

Picasso.with(context)
  .load(url)
  .resize(50, 50)
  .centerCrop()
  .into(imageView)
你还可以自定义更先进的转换方法
public class CropSquareTransformation implements Transformation {
  @Override public Bitmap transform(Bitmap source) {
    int size = Math.min(source.getWidth(), source.getHeight());
    int x = (source.getWidth() - size) / 2;
    int y = (source.getHeight() - size) / 2;
    Bitmap result = Bitmap.createBitmap(source, x, y, size, size);
    if (result != source) {
      source.recycle();
    }
    return result;
  }

  @Override public String key() { return "square()"; }
}
或者是之前提到的图片变成圆角图片,你都可以自定义方法,然后通过该类的实例转换。
3.占位符即默认图片:

在很多软件中档图片没有加载出来前,都有有一个默认的图片或者头像的东西显示在那里。或者图片找不到,下载不下来,都可以使用这张默认的图片来代替。通过使用Picassoi你只需要一句代码就可以实现该功能

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);
他在加载这张默认图片之前会请求三次,如果三次请求还是没办法加载出来图片,就设置为默认图片

4.资源加载

Resources,assets,files,content providers 都支持作为图片资源。

Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.with(context).load(new File(...)).into(imageView3);
5.调试指标

通过setIndicatorsEnabled(true),设置为true,就可以开启调试模式,左上角是红色的表示从网络上加载,蓝色表示从本地(磁盘)中加载,绿色表示从内存中加载Picasso的使用及原理详解_第1张图片

6.使用方法:

android studio中添加

compile 'com.squareup.picasso:picasso:2.5.2'

eclipse总添加jar包,jar包下载地址:

点击打开链接

你可能感兴趣的:(安卓)