简介
Picasso是Square公司出品的一个强大的图片下载和缓存图片库。使用起来方便快捷,很轻松的加载图片在你的应用程序中。
Picasso还可以帮我们做以下事情
(1)在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
(2)使用复杂的图片压缩转换来尽可能的减少内存消耗
(3)自带内存和硬盘二级缓存功能
下载地址
Github:https://github.com/square/picasso
Picasso的使用
配置
在app/build.gradle文件当中添加如下依赖:
implementation 'com.squareup.picasso:picasso:2.71828'
简单使用
在以前的Picasso加载图片中,都是使用Picasso.with(),而现在的Picasso加载图片,使用的是Picasso.get();这方面和以前有很大的区别。
①基本用法
Picasso.get().load(photoUrl).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
placeholder(xxx). 设置资源加载过程中的显示的Drawable。
error(xxx).设置load失败时显示的Drawable。
into(xxx) 设置资源加载到的目标 包括ImageView Target等
②加载SD卡资源
Picasso.get().load("file://"+ Environment.getExternalStorageDirectory().getPath()+"/app.jpg").placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
③加载assets资源
Picasso.get().load("file:///android_asset/ff.gif").placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
④加载drawable资源
Picasso.get().load("android.resource://com.frank.glide/drawable/news").placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
⑤裁剪图片
Picasso.get().load(photoUrl).resize(50,100).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
⑥旋转图片
Picasso.get().load(photoUrl).rotate(180).placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
⑦在RecyclerView中加载图片
RecyclerViewAdapter adapter=new RecyclerViewAdapter(this);
mRecyclerView.setAdapter(adapter);
mRecyclerView.setLayoutManager(new LinearLayoutManager(this,LinearLayoutManager.VERTICAL,false));
在adapter中使用Picasso
// 显示数据
Picasso.get()
.load(mDatas[position])
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(holder.mIvAdapterPhoto);
图片填充样式
①centerInside()
按比例裁减图片,图片可以完全显示,但如果图片比View小,则无法充满整个View,必须与resize()
方法同时使用。
Picasso.get().load(photoUrl).resize(50,50).centerInside().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
②centerCrop()
按比例裁减图片,使其居中显示,充满View,会造成图片显示不全,必须与resize()
方法同时使用。
Picasso.get().load(photoUrl).resize(50,50).centerCrop().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
③noFade()
取消图片的过渡显示效果
Picasso.get().load(photoUrl).resize(50,50).noFade().placeholder(R.mipmap.ic_launcher).error(R.mipmap.ic_launcher).into(mIvPhoto);
Picasso优先级策略
Picasso.get()
.load(photoUrl)
.priority(Picasso.Priority.HIGH)//分为HIGH, NORMAL, 和 LOW,默认优先级为NORMAL;
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(mIvPhoto);
缓存策略
Picasso.get()
.load(photoUrl)
.priority(Picasso.Priority.HIGH)//分为HIGH, NORMAL, 和 LOW,默认优先级为NORMAL;
.placeholder(R.mipmap.ic_launcher)
.error(R.mipmap.ic_launcher)
.into(mIvPhoto);
我写了一个关于Picasso的工具类,方便大家使用
public class PicassoUtils {
//加载本地图片
public static void setImg(Context context, int resId, ImageView imgView){
Picasso.get()
.load(resId)
.config(Bitmap.Config.RGB_565)//8位RGB位图
.fit()
.into(imgView);
}
//按照一定的宽高加载本地图片,带有加载错误和默认图片
public static void setImg(Context context,int resId,ImageView imgView,int weight,int height){
Picasso.get()
.load(resId)//加载本地图片
.config(Bitmap.Config.RGB_565)//8位RGB位图
.resize(weight,height)//设置图片的宽高
.into(imgView);//把图片加载到控件上
}
//加载网络图片到imgview,带有加载错误和默认图片
public static void setImg(Context context, String imgurl, int resId, ImageView imgView){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.placeholder(resId)//默认图片
.error(resId)//加载错误的图片
.fit()//图片的宽高等于控件的宽高
.into(imgView);//把图片加载到控件上
}
public static void setImg(Context context, String imgurl, ImageView imgView){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.fit()//图片的宽高等于控件的宽高
.into(imgView);//把图片加载到控件上
}
//加载网络图片到Viewpager
public static void setImg(Context context, String imgurl, ViewPager imgView){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.fit()//图片的宽高等于控件的宽高
.into((Target) imgView);//把图片加载到控件上
}
//加载网络图片到Viewpager,带有加载错误和默认图片
public static void setImg(Context context, String imgurl, int resId, ViewPager imgView){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.placeholder(resId)//默认图片
.error(resId)//加载错误的图片
.fit()//图片的宽高等于控件的宽高
.into((Target) imgView);//把图片加载到控件上
}
//按照设定的宽高加载网络图片到imgview
public static void setImg(Context context, String imgurl,ImageView imgView,int weight,int height){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.resize(weight,height)//设置图片的宽高
.into(imgView);//把图片加载到控件上
}
//按照设定的宽高加载网络图片到imgview,带有加载错误和默认图片
public static void setImg(Context context, String imgurl, int resId,int weight,int height, ImageView imgView){
Picasso.get()
.load(imgurl)//加载网络图片的url
.config(Bitmap.Config.RGB_565)//8位RGB位图
.placeholder(resId)//默认图片
.error(resId)//加载错误的图片
.resize(weight,height)//设置图片的宽高
.into(imgView);//把图片加载到控件上
}
}
总结
到这里Picasso的基本使用就讲解完了,如果有需要,可以去下载我的代码看一下。