十分钟玩儿转Picasso
本文会介绍Picasso的基本使用方法,让您快速上手Picasso。后续我们会深入介绍Picasso的设计思想,从源码角度详细分析它的实现,敬请期待。
一、Picasso的特性
Picasso是一个Android图片加载缓存框架,它具有如下特性:
- 支持任务优先级,会优先加载“优先级”较高的图片。
- 带有统计监控功能,可以统计缓存命中率,实时监控已使用的内存等等。
- 能够根据当前网络状态自动调整并发线程数。
- 支持图片的延迟加载。
- 本身不具有本地缓存,而是使用的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中显示指定图片,而且还会帮助我们做好以下几件事(很贴心有木有):
- 在Adapter中检测View的重用并自动取消之前的下载。
- 对于一些复杂图片变换,也只需要比较小的内存。
- 自动进行内存缓存及磁盘缓存。
(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。
