我写APP的时候发现要获取网络图片,最初我看别人博客自己写的时候发现成效不好,每次加载图片会有卡顿,因为自己没有用到图片的缓存,然后我在学长的建议下就选择使用图片加载框架Picasso,Picasso怎么使用的呢,其实官网上说的很明白了,接下来主要是给自己标记一下,对于以后的使用更加方便。
导入Picasso库
在app的gradle中的dependencies项中添加依赖
implementation 'com.squareup.picasso:picasso:2.71828'
然后sync
使用Picasso
使用就特别简单了,最基本的就是:
Picasso.get().load(url地址).into(控件id);
这样我们就实现了将网络上的一张图片设置到控件中去了
Picasso已经自动将Android上图片加载常见的的陷阱处理掉了,比如:
- 在Adapter中处理ImageView循环和取消下载
- 对复杂图像进行转换,使其占用最小的内存
- 自动的内存和磁盘缓存
Adapter
我们在Adapter中直接使用上面的代码就好了,他会自动的去实现
@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.get().load(url).into(view);
}
图片转换
Picasso.get()
.load(url)
.resize(图片宽, 图片高)
.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()"; }
}
之后将该类的实例传入到transform方法
占位图
Picasso.with(this).load(album.getAlbumUrl())
.placeholder(R.drawable.album)
.error(R.drawable.album)
.into(album_img);
placeholder就是没有加载出来显示的图片,error是加载失败显示的图片,我这里就用了一张图片。
资源加载
Resources, assets, files, content providers
都是Picasso可加载的图片源类型
Picasso.get().load(R.drawable.landing_screen).into(imageView1);
Picasso.get().load("file:///android_asset/DvpvklR.png").into(imageView2);
Picasso.get().load(new File(...)).into(imageView3);
调试指示
开发时可以打开彩带显示来指示图片源,在Picasso实例调用setIndicatorsEnabled(true)
即可
想详细了解的话还是去官网看会比较好。
官网链接:http://square.github.io/picasso/