Android图片加载框架之Picasso的使用

简介

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的基本使用就讲解完了,如果有需要,可以去下载我的代码看一下。

下载

csdn:https://download.csdn.net/download/wen_haha/10928254

github:https://github.com/kongkongdaren/PicssoDemo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值