picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。仅仅只需要一行代码就能完全实现图片的异步加载:
Picasso.with(context).load("要获取的图片网址").into(imageView);
Glide是Google官方推荐使用的图片加载缓存的框架,也仅仅只需要一行代码即可实现图片的加载
两个框架用起来功能相似,在我看来,相似度达到了基本上90%以上。可以说Glide是在Picasso的基础上新增加了一点点其他的新的功能,在我看来Glide比Picasso功能强大一些,推荐使用Glide框架(纯属个人意见)。
Glide.with(this).load("要获取的图片网址").placeholder(R.drawable.ic_launcher).into(image1);
导入库
Picasso和Glide都在jcenter上。在项目中添加依赖非常简单:
Picasso
dependencies {
compile 'com.squareup.picasso:picasso:2.5.1'
}
Glide
dependencies {
compile 'com.github.bumptech.glide:glide:3.5.2'
compile 'com.android.support:support-v4:22.0.0'
}
或者直接下载jia包导入到自己的项目中去
Picasso简单用法
①直接加载图片
RequestCreator p = Picasso.with(this).load(url);
p.into(image1);
②转换图片以适应布局大小并减少内存占用
Picasso.with(this).load(url)
.resize(500, 500).centerCrop().into(image2);
③Place holders-空白或者错误占位图片:picasso提供了两种占位图片,未加载完成或者加载发生错误的时需要一张图片作为提示。
Picasso.with(context)
.load(url)
.placeholder(R.drawable.user_placeholder)
.error(R.drawable.user_placeholder_error)
.into(imageView);
④资源文件的加载:除了加载网络图片picasso还支持加载Resources, assets, files, content providers中的资源文件。
Picasso.with(context).load(R.drawable.landing_screen).into(imageView1);
Picasso.with(context).load(new File(...)).into(imageView2);
⑤你还可以自定义转换:
class CropSqureTransformation implements Transformation{
@Override
public String key() {
return "square()";
}
@Override
public Bitmap transform(Bitmap bitmap) {
int size = Math.min(bitmap.getWidth(), bitmap.getHeight());
int x = (bitmap.getWidth() - size)/2;
int y = (bitmap.getHeight() - size)/2;
Bitmap result = bitmap.createBitmap(bitmap, x, y, size, size);
if(result != bitmap){
bitmap.recycle();
}
return result;
}
}
```⑥Adapter的重用会被自动检测到,Picasso会取消上次的加载
<div class="se-preview-section-delimiter">div>
这里写代码片
“`
@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.with(context).load(url).into(view);
}
Glide基本用法
①加载图片,对于较大的图片,加载未能及时显示,设置等待时的图片用placeholder()
Glide.with(this)
.load(url)
.placeholder(R.drawable.ic_launcher)
.into(image1);
②使用centerCrop是利用图片图填充ImageView设置的大小,如果ImageView的Height是match_parent则图片就会被拉伸填充
Glide.with(this)
.load(url)
.centerCrop().into(image2);
③当加载图片失败时,通过error(Drawable drawable)方法设置加载失败后的图片显示:
Glide.with(this).load(url).error(R.drawable.ic_launcher).into(image3);
④ 如果使用的是ListView,可以直接在Adapter的getView方法中使用:
@Override
public View getView(int position, View convertView, ViewGroup parent) {
if (null == convertView) {
//.....
}
Glide
.with(context)
.load(imageUrls[position])
.into(holder.imageView);
return convertView;
}
⑤显示gif动画:
Glide .with( context ).load( gifUrl )
.asGif() //判断加载的url资源是否为gif格式的资源
.error( R.drawable.full_cake )
.into( imageViewGif );
⑥缓存策略
Glide
.with( context )
.load( Images[0] )
.skipMemoryCache( true ) //跳过内存缓存
.into( imageViewInternet );
Glide
.with( context )
.load( images[0] )
.diskCacheStrategy( DiskCacheStrategy.NONE ) //跳过硬盘缓存
.into( imageViewInternet );
DiskCacheStrategy.NONE 什么都不缓存
DiskCacheStrategy.SOURCE 仅仅只缓存原来的全分辨率的图像
DiskCacheStrategy.RESULT 仅仅缓存最终的图像,即降低分辨率后的(或者是转换后的)
DiskCacheStrategy.ALL 缓存所有版本的图像(默认行为)
⑦优先级,设置图片加载的顺序:
Priority.LOW
Priority.NORMAL
Priority.HIGH
Priority.IMMEDIATE
private void loadImageWithHighPriority() {
Glide
.with( context )
.load( mages[0] )
.priority( Priority.HIGH )
.into( imageViewHero );
}
private void loadImagesWithLowPriority() {
Glide
.with( context )
.load( images[1] )
.priority( Priority.LOW )
.into( imageViewLowPrioLeft );
Glide
.with( context )
.load( images[2] )
.priority( Priority.LOW )
.into( imageViewLowPrioRight );
}
*好了,写到这里Picasso和Glide的基本用法差不多写完了,通过上面的学习大概知道了Picasso和Glide的基本用法。Glide和Picasso都是非常完美的库。Glide加载图像以及磁盘缓存的方式都要优于Picasso,速度更快,并且Glide更有利于减少OutOfMemoryError的发生,GIF动画是Glide的杀手锏,Picasso的库的内存小一些,并且显示的图片的平滑要优于Glide,当然Glide可以去设置一下也可以是效果达到Picasso。至于你喜欢那个框架,那就取决于你个人的态度了,我的建议是根据自己的需求选择合适的,因为两框架都各有各的优势和不足。
最后谢谢大家的支持,祝大家身体健康,工作顺利*