美文网首页
android-------非常好的图片加载框架和缓存库(Pic

android-------非常好的图片加载框架和缓存库(Pic

作者: 切切歆语 | 来源:发表于2019-11-23 20:49 被阅读0次

    Picasso是Square公司开源的一个Android图形缓存库, 可以实现图片加载(本地和网络)和缓存功能。

    地址:http://square.github.io/picasso/

    jar包下载: Picasso.jar

    Paicsso可以实现图片的很多功能,drawable/mipmap下图片加载,SD卡图片加载,网络图片加载(可自己设置是否缓存),图片裁剪等。

    Picasso实现了图片的异步加载,并解决了Android中加载图片时常见的一些问题,它有以下特点:

    1. 在Adapter中取消了不在视图范围内的ImageView的资源加载,因为可能会产生图片错位;
    2. 使用复杂的图片转换技术降低内存的使用
    3. 自带内存和硬盘的二级缓存机制

    效果如图:

    image

    1:加载本地图片

    int resourceId = R.mipmap.ic_launcher;
    Picasso.with(this).load(resourceId).into(iv1);
    

    2:加载SD卡图片

    File file = new File(path2);
    Picasso.with(this).load(file).into(iv2);
    

    3:普通加载网络图片

    Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg").into(iv3);
    

    4:加载图片并裁剪

    Picasso.with( this).load("url").resize(99,99).centerInside().into(iv4);
    

    5:初始化图片和错误时的图片

     Picasso.with(this).load("url")
                       .placeholder(R.mipmap.ic_launcher)//默认显示图片
                       .error(R.mipmap.ic_launcher)//加载时出现错误显示的图片
                       .into(iv5);
    

    6:加载图片过大要放弃缓存( Picasso默认会使用设备的15%的内存作为内存图片缓存,且现有的api无法清空内存缓存。我们可以在查看大图时放弃使用内存缓存,图片从网络下载完成后会缓存到磁盘中,加载会从磁盘中加载,这样可以加速内存的回收 )

    Picasso.with(this).load("url")//查看大图放弃缓存,加速内存的回收
                      .memoryPolicy(NO_CACHE, NO_STORE)
                      .into(iv6);
    

    7: 计算出最佳的大小及最佳的图片质量来进行图片展示 ( 减少内存 )

    Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg")
                       .fit()
                       .into(img8);
    

    8:自定义图片控件加载

       /**
              *  重写ImageView的onDetachedFromWindow方法,在它从屏幕中消失时回调,去掉drawable引用,能加快内存的回收。
              *  priority()设置图片加载的优先级
              * 如果一个屏幕上顶部图片较大,而底部图片较小,因为Picasso是异步加载,所以小图会先加载出来,但是对于用户来说,更希望看到的是上面的图片先加载,
              * 底部的图片后加载,Picasso支持设置优先级,分为HIGH, MEDIUM, 和 LOW,所有的加载默认优先级为MEDIUM;
              */
    Picasso.with(this).load("http://img.my.csdn.net/uploads/201407/26/1406383243_5120.jpg")
                      .priority(HIGH)
                      .into(recyclerImageView);
    

    9:列表加载(.tag的使用)

     Picasso.with(context).load("url"])
                          .tag("RecyclerView") //参数为 Object
                          .into(viewHolder.imageView);
    

    补充:

    //因为图片的旋转都是相对(0,0)进行操作,所以如果我们想自定义相对于某个点,也是可以的,只需要调用
    //.rotate(float degrees, float pivotX, float pivotY)
    
     Picasso.with(context).load("url").rotate(90f) //旋转90度
                    .into(imageViewSimpleRotate);
    

    新进程中查看大图

    列表页的内存已经非常稳定,但是查看大图时,大图往往占用了20+m内存,加上现有进程中的内存,非常容易oom,在新进程中打开Activity成为比较取巧的避免oom的方式。

    <activity android:name=".DetailActivity" android:process=":picture"/>
    

    添加程序所需要的依赖:

    compile 'com.squareup.picasso:picasso:2.5.2'
    

    AndroidManifest.xml添加权限

     <uses-permission android:name="android.permission.INTERNET" />
     <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
     <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
     <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    

    源码点击下载
    https://github.com/DickyQie/android-load-picture/tree/picasso

    其他网络图片加载方式,请看
    Android之网络图片加载的5种模式

    Android之网络图片框架UniversalImageLoader和结合LruCache缓存图片

    Android之Fresco(facebook的强大Android图片加载的框架)

    Android之Glide(非常好用的图片加载框架)

    相关文章

      网友评论

          本文标题:android-------非常好的图片加载框架和缓存库(Pic

          本文链接:https://www.haomeiwen.com/subject/qwgubctx.html