Picasso是Square公司开源的一个Android平台上的图片加载框架
核心类:
Picasso:负责图片下载、变换、缓存的管理器,当它收到一个图片下载请求的时候,它会创建Request并提交给Dispatcher
Dispatcher: Dispatcher会寻找对应的处理器RequestHandler,并将请求与该处理器一起提交给线程池执行
图片加载步骤:
创建 -> 入队 -> 执行 -> 解码 -> 变化 -> 批处理 -> 完成 -> 分发 -> 显示
使用
Picasso.get().load(url).into(first_img)
//加载一张图片 旋转45°
Picasso.get()
.load(URL)
.rotate(45f)
.placeholder(R.drawable.placeholder_disk)
.into(imgOne);
//加载一张图片并设置一个回调接口
Picasso.get()
.load(URL)
.placeholder(R.drawable.placeholder_disk)
.into(imgOne, new Callback() {
@Override
public void onSuccess() {
}
@Override
public void onError(Exception e) {
}
});
//预加载一张图片
Picasso.get().load(URL).fetch();
//同步加载一张图片,注意只能在子线程中调用并且Bitmap不会被缓存到内存里.
new Thread() {
@Override
public void run() {
try {
final Bitmap bitmap = Picasso.get().load(URL).get();
} catch (IOException e) {
e.printStackTrace();
}
}
}.start();
//加载一张图片旋转并且添加一个Transformation,可以对图片进行各种变化处理,例如圆形头像.
Picasso.get().load("url").rotate(10).transform(new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
//处理Bitmap
return null;
}
@Override
public String key() {
return null;
}
}).into(imgTwo);
//加载一张图片并按照指定尺寸以centerInside()的形式缩放.并设置加载的优先级为高.注意centerInside()或centerCrop()
//只能同时使用一种,而且必须指定resize()或者resizeDimen();
Picasso.get().load(URL)
.resize(400, 400)
.centerInside()
.priority(Picasso.Priority.HIGH)
.into(imgTwo);
//加载一张图片并设置tag,可以通过tag来暂定或者继续加载,可以用于当ListView滚动是暂定加载.停止滚动恢复加载.
Picasso.get().load(URL).tag(getContext()).into(imgTwo);
Picasso.get().pauseTag(getContext());
Picasso.get().resumeTag(getContext());
参考: