Android知识Android_Study伪程序员

十分钟玩儿转Picasso

2016-07-03  本文已影响731人  absfree

本文会介绍Picasso的基本使用方法,让您快速上手Picasso。后续我们会深入介绍Picasso的设计思想,从源码角度详细分析它的实现,敬请期待。

一、Picasso的特性
Picasso是一个Android图片加载缓存框架,它具有如下特性:

  1. 支持任务优先级,会优先加载“优先级”较高的图片。
  2. 带有统计监控功能,可以统计缓存命中率,实时监控已使用的内存等等。
  3. 能够根据当前网络状态自动调整并发线程数。
  4. 支持图片的延迟加载。
  5. 本身不具有本地缓存,而是使用的OkHttp实现。
    Picasso除了使用上比较简单、功能特性丰富以外,还具备的一大优点便是源码清晰易读,适合于阅读学习。

二、Picasso的基本使用
1. 添加依赖
在使用Picasso前,首先我们要添加依赖,如果使用的是Gradle,那只需要在模块的build.gradle中添加如下语句:

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

当然也可以下载jar包,然后添加到项目中,这里就不再赘述了。

2. 显示图片
使用Picasso做到这点真的是简单到不要不要的了,只需要下面一句即可:

Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);

其中,context为当前应用上下文,imageView为我们想要在其中显示图片的ImageView对象。 Picasso不仅会在我们指定的ImageView中显示指定图片,而且还会帮助我们做好以下几件事(很贴心有木有):

(1)自动取消图片下载
当Picasso检测到convertView不为空(View的重用)时,它会自动取消之前对于convertView的下载任务。

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

(2)图片变换
使用Picasso,我们可以很容易的对图片进行变换,以减少内存占用或是更适应于布局。只需要像下面一样的一个链式调用(很简单有木有):

Picasso.with(context)
        .load(url)
        .resize(50,50)
        .centerCrop()
        .into(imageView);

当然,我们也可以进行更加复杂的变换,通过实现Picasso中的Transformation接口,我们可以自定义一个“图片变换器”。示例代码如下:

public class CropSquareTransformation implements Transformation {
    @Override
    public Bitmaptransform(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()";
    }
}

把以上类的实例传递给transform方法即可完成对图片的自定义变换。

(3)占位符(place holders)
Picasso支持在图片下载过程中以及图片加载失败时显示一个“占位符图片”,这个特性使用起来也很简单,请看以下示例代码:

Picasso.with(context)
        .load(url)
        .placeholder(R.drawable.user_placeholder)
        .error(R.drawable.user_placeholder_error)
        .into(imageView);

当重试三次仍然无法成功加载图片就会显示error方法参数中指定的图片。

(4)资源加载
在使用Picasso时,Resources、assets、文件系统、ContentProvider都可以作为图片的来源(很方便有木有):

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(newFile(...)).into(imageView3);

看到这里,是不是已经爱上了Picasso,快去和它愉快的玩儿耍吧_

长按或扫描二维码关注我们,让您利用每天等地铁的时间就能学会怎样写出优质app。

Paste_Image.png
上一篇下一篇

猜你喜欢

热点阅读