Picasso使用解析

来源:互联网 发布:c语言函数声明格式 编辑:程序博客网 时间:2024/04/30 11:34

Picasso介绍

Picasso是Square公司开源的Android图形异步加载和缓存框架

Picasso特征:

  • 自带内存和硬盘二级缓存功能
  • 加载本地资源、资产、SD卡及ContentProvider中的图片
  • 在Adapter中需要取消已经不存在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso解决了图片加载错位的问题
  • 使用图片压缩尽可能的减少内存消耗
  • 图片转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作

Picasso导包

在创建的项目的gradle文件中添加如下代码
dependencies {    compile fileTree(include: ['*.jar'], dir: 'libs')    androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {        exclude group: 'com.android.support', module: 'support-annotations'    })    compile 'com.android.support:appcompat-v7:25.2.0'    testCompile 'junit:junit:4.12'    compile 'com.squareup.picasso:picasso:2.5.2'}

Picasso基本使用

//加载资源图片        Picasso.with(context).load(R.mipmap.ic_launcher).into(imageView);        //加载资产目录图片        Picasso.with(context).load("file:///android_asset/ic_launcher.png").into(imageView);        //加载SDCard图片        Picasso.with(context).load(new File("path")).into(imageView);        //加载网络图片        Picasso.with(context).load("url").into(imageView);

Picasso常见设置

设置占位图片:

Picasso可以设置下载前和下载出错时的图像,在下载出错的图像被设置前,Picasso会尝试三次请求,三次都失败会显示error图片
Picasso.with(context)                .load("url")                .placeholder(R.mipmap.ic_launcher)                .error(R.mipmap.ic_launcher)                .into(imageView);

Picasso常用设置:

 Picasso.with(context)                .load("url")                .placeholder(R.mipmap.ic_launcher)//下载前的图片                .error(R.mipmap.ic_launcher)//错误图片                .noFade()//无淡入淡出                .resize(width,height)//重新调整图片的大小                .resizeDimen(widthRes,heightRes)//重新调整图片的大小,从资源文件获取宽高                //图片剪切   图片剪切的类型有centerCro,centerInside,fit    前两者都要配合resize()使用  fit则不能喝resize使用                .centerCrop()//按照控件的大小显示,超出部分则被剪切掉                .centerInside()//按照控件大小按比例压缩图片,使图片全部显示在控件上                .fit()//将图片完全的填充到控件上                //自定义图形转换   更好的适配布局   减少存储空间                .transform(new 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 bitmap = Bitmap.createBitmap(source,x,y,size,size);                        return bitmap;                    }                    @Override                    public String key() {                        return "cricle";//返回的自定义图片的名称                    }                })                .rotate(degrees)//图片旋转  参数为旋转角度                //设置图片质量 RGB_565用来优化内存    默认情况下Android使用的ARGB_8888                .config(Bitmap.Config.RGB_565)                //查看大图时放弃内存缓存memory  cache  Picasso默认会使用设备的15%的内存作为内存图片缓存,且现有的API无法清空内存缓存                //在查看大图时放弃使用内存缓存,图片从网络下载完成后会自动缓存到磁盘中,加载会从磁盘中加载,这样可以加速内存回收                .memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE)//NO_CACHE指图片加载跳过从内存缓存查找,NO_STORE指图片存储时不往内存缓存中存储                .tag("tag")//设置tag  以方便后面处理 Picasso.with(context).pauseTag("tag");  Picasso.with(context).resumeTag("tag");   Picasso.with(context).cancelTag("tag");                .into(imageView);

另:新进程中查看大图
列表页的内存已经非常稳定,但是查看大图时,大图占有的内存加上现有进程中的内存非常容易造成OOM,在新进程中打开Activity成为比较取巧的避免OOM的方式
在清单文件中配置
 <activity android:name=".PicActivity"    android:process=":picture"/>
这样既可在新进程中打开此Activity,因此Picasso也将在新的进程中创建基于新ApplicationContext的单例

Picasso在Application中的设置

private void initPicasso() {        Picasso picasso = new Picasso.Builder(this)                //设置缓存大小 10M                .memoryCache(new LruCache(10 << 20))                //设置图片格式  这样可以节省一半内存                .defaultBitmapConfig(Bitmap.Config.RGB_565)                //配置下载器 如果没有配置则默认使用 UrlConnectionDownloader                //如果使用OkHttpDownloader 则需要单独配置 同时设置磁盘缓存的位置和大小                .downloader(new OkHttpDownloader(context.getCacheDir(),10<<20))//                .downloader(new UrlConnectionDownloader(context)                //设置调试标记  左上角小三角标记  红色代表图片从网络加载                // 绿色代表图片从内存加载  蓝色代表图片从磁盘加载                .indicatorsEnabled(true)                .build();        //设置单例的Picasso对象        Picasso.setSingletonInstance(picasso);    }
将此方法在onCreate()方法中初始化






0 0
原创粉丝点击