Picasso(一基本使用)
首先添加依赖(和我之前分析的EventBus一样,都是从一些重要的方法入手,获取不同的版本有所区别,但是相近的版本都是有联系的)
implementation 'com.squareup.picasso:picasso:2.71828'
下面是我们经常使用的模板代码
Picasso.get()// 通过单例获取对象
// 加载的网络URL地址,获取本地的资源路径也是可以的
.load("url")
// 图片的转换(个人对图片的处理)
.transform(transformation)
// 设置图片占位(当要加载的图片还没有显示的时候出现)
.placeholder(R.drawable.ic_launcher_background)
// 图片加载失败的时候出现
.error(R.drawable.ic_launcher_foreground)
// 设置图片的尺寸(此时时像素,当然也可以设置dp,用dimen即可)
.resize(400, 600)
// 设置图片的显示,防止图片出现拉伸,变形等
.centerCrop()
// 可以做动画
.rotate(260)
// 设置优先级
.priority(Picasso.Priority.HIGH)
// 设置标签给请求
.tag("tag")
// 设置内存缓存策略(默认时开启的)
.memoryPolicy(MemoryPolicy.NO_CACHE)
// 设置磁盘缓存策略(同样默认开启)
.networkPolicy(NetworkPolicy.NO_CACHE)
// 显示图片,此时的这个callBack回调接口可以实现也可以不实现
.into(imageView, new Callback() {
@Override
public void onSuccess() {
System.out.println("请求成功");
}
@Override
public void onError(Exception e) {
System.out.println("请求失败");
}
});
对于图片转换,下面有一个例子(裁剪出一个圆形)
private Transformation transformation = new Transformation() {
@Override
public Bitmap transform(Bitmap source) {
// 获取源图片的宽高
int width = source.getWidth();
int height = source.getHeight();
// 创建副本并绘制
Bitmap copyBitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
Canvas canvas = new Canvas(copyBitmap);
Paint paint = new Paint(Paint.ANTI_ALIAS_FLAG);
canvas.drawCircle(width / 2, height / 2, Math.min(width, height) / 2, paint);
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.SRC_IN));
canvas.drawBitmap(source, 0, 0, paint);
return copyBitmap;
}
@Override
public String key() {
return "circle";
}
};
上面的一个链式调用有一个令人疑惑的点就是,为什么要设置tag,就是为请求打上一个标签。因为打上了标签,我们就可以找到这个请求,并对其做一些操作,比如,暂停当前请求等。说到这,我们可能想到的就是ListView,在ListView如果使用Picasso,如果一时间加载大量的图片,难免会造成UI卡顿。就有下面的操作
listView.setOnScrollListener(new AbsListView.OnScrollListener() {
@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {
Picasso picasso = Picasso.get();
// 可以在滑动停止的时候加载图片,防止UI卡顿
if (scrollState == SCROLL_STATE_IDLE) {
picasso.resumeTag("tag");
} else {
picasso.pauseTag("tag");
}
}
@Override
public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount, int totalItemCount) {
}
});
至于,其他的属性设置就比较好理解,就打算从获取单例(get()),load,into这几个核心方法来简单说明以下Picasso的一些原理。
小结:
看到这个章节,我们需要知道和了解的就是Picasso的基本使用,设置一些我们常用的属性,以及这些属性代表的意思即可。
总结
在这个方法中,我们主要是完成一些初始化和配置工作,比如Picasso的创建,信息的获取,以及Dispatcher的创建。知道其中重要的核心类,线程的调度的重要handler就可以了。