Picasso的使用介绍
博客专区 > baochen 的博客 > 博客详情
Picasso的使用介绍
baochen 发表于10个月前
Picasso的使用介绍
  • 发表于 10个月前
  • 阅读 25
  • 收藏 0
  • 点赞 0
  • 评论 0

新睿云服务器60天免费使用,快来体验!>>>   

什么是 Picasso

Picasso : 这里所说的 Picasso 是一款 优秀的 Android 图片 加载框架; 官网:http://square.github.io/picasso/

在 Android Studio 中使用方式

在 build.gradle 中引入

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

Picasso 最简单的使用方式

Picasso.with(context)
    .load(url)
    .into(imageView);

这里的

with() 中放入的是上下文,比如 activity 等; load() 中放入的是图片的资源,可以本地图片,也可以是网络图片,或者其他资源的图片; into() 中放入的是需要显示图片的 View 组件, 可以是ImageView ,也可以是实现了 Target 接口的 其他自定义View 组件

Picasso 的其他属性

1. placeholder

Picasso.with(context)
    .load(url)
   .placeholder(R.drawable.user_placeholder)
    .into(imageView);

placeholder 是过度图片,当需要的图片还未加载出来时,可以使用这张过度图片。提升用户体验

2. noPlaceholder

noPlaceholder 刚刚好和 placeholder 相反。 noPlaceholder 的目的是强制设置为没有占位的过度图片,他不可以和 placeholder 一起使用,否则会抛出异常,(PS:详细也不可能一起使用的)。

3. error

   Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .into(imageView);

error 是用来显示当需要的图片的加载失败时, 代替显示的图片。 同样的。也有 noError 属性,使得阻止 错误图片显示。

4.noFade

在 Picasso 加载图片的时候,会有一个默认的渐入的过度效果,目的是为了 使得用户有更好的UI 视觉效果。然而这个属性的作用,就是禁止这个默认的过度效果。

5. Resize(int w,int h)

Resize 是用来设置显示的 图片的大小的,因为我们获得的图片的尺寸大小可能和我们想要显示的大小不一样,所以就需要重新设置图片的大小。Resize 的单位是dp

6. onlyScaleDown

onlyScaleDown 配合着 上面的 Resize 一起使用,使得,当获得的图片大小,大于我们使用 Resize 设置的大小时,才起作用。

7. centerCrop()

centerCrop() 裁剪图片。使得图片充满 ImageView 的边界、居中显示。防止图片扭曲变形等。

8. centerInside()

由于上面的 centerCrop() 是可能看不到全部图片的,所以需要使用 centerInside() 来进行显示,但是当 图片尺寸小于我们设置的图片尺寸时。可能会造成图片没有充满组件 View 的边界。所以他们各有优缺点。

9.fit

fit 的作用主要是帮助我们自动测量 view 组件的大小,然后内部调用reszie方法把图片裁剪到View的大小。这样我们就不需要去自己计算和设置尺寸大小了,但是 fit() 也可能会造成图片压缩或者拉伸。所以最好配合着 centerCrop() 一起使用。 这里需要特别注意的是:

fit 只对ImageView 有效 *** ImageView 不能使用 wrap_content ***

####10.Rotation() Rotation() 使图片旋转,默认原点是(0,0),但是,也可以自己指定原点。 rotate(float degrees, float pivotX, float pivotY) 以(pivotX, pivotY)为原点旋转

11.Transformation

加载图片的时候使用的转换器,可以实现高斯模糊 ,对图片进行圆角处理,灰度处理等功能。 这里推荐一个关于 Picasso 的 Transformation 的相关效果的库 https://github.com/wasabeef/picasso-transformations

请求优先级

Picasso 设置优先级有三个属性:

public enum Priority {
    LOW,
    NORMAL,
    HIGH
  }

设置优先级的方式:

Picasso.with(context)
    .load(url)
    .placeholder(R.drawable.user_placeholder)
    .error(R.drawable.user_placeholder_error)
    .priority(Picasso.Priority.HIGH)
    .into(imageView);

同步/异步加载图片

同步是使用 get() 方式:

 try {
           Bitmap bitmap =  Picasso.with(context).load(url).get();
        } catch (IOException e) {
            e.printStackTrace();
        }

需要注意的是,同步方式不能够在主线程中进行。

异步方式: fetch()

Picasso.with(this).load(url).fetch(new Callback() {
          @Override
          public void onSuccess() {
              //加载成功
          }

          @Override
          public void onError() {
            //加载失败
          }
      });

使用 fetch () 方式并不能够得到图片,只是得到图片加载成功失败的状态。而且 这种方式是 LOW 优先级的,也就是最低的优先级。使用异步的方式,是将 图片进行了缓存处理,想要得到图片的 Bitmap 。需要重新 去缓存中获取。 所以这样方式最好的使用场景就是进行图片的预加载。

Picasso 的缓存

Picasso 默认情况吓是进行了内存缓存和磁盘缓存的。如果我们 不想进行缓存,可以使用下面的方式:

禁止内存缓存

 .memoryPolicy(MemoryPolicy.NO_CACHE,MemoryPolicy.NO_STORE)//禁止内存缓存

这里的 NO_CACHE:表示处理请求的时候跳过检查内存缓存 NO_STORE: 表示请求成功之后,不将最终的结果存到内存。

禁止磁盘缓存:

 .networkPolicy(NetworkPolicy.NO_CACHE)//禁止磁盘缓存

这里的磁盘缓存有三个类型。分别是: NO_CACHE: 表示处理请求的时候跳过处理磁盘缓存 NO_STORE: 表示请求成功后,不将结果缓存到Disk,但是这个只对OkHttp有效。 OFFLINE: 这个就跟 上面两个不一样了,如果networkPolicy方法用的是这个参数,那么Picasso会强制这次请求从缓存中获取结果,不会发起网络请求,不管缓存中能否获取到结果。

Picasso开启日志和地址tag

开启日志:

  .setLoggingEnabled(true);//开启日志打印

缓存指示器:

 .setIndicatorsEnabled(true);//显示指示器

当开启缓存指示器后,会在图片的左上角看到几种颜色的标识。 绿色表示从内存加载、蓝色表示从磁盘加载、红色表示从网络加载。 Tag: Picasso 允许我们为一个请求设置tag来管理请求

cancelTag(Object tag) 取消设置了给定tag的所有请求 pauseTag(Object tag) 暂停设置了给定tag 的所有请求 resumeTag(Object tag) 重启被暂停的给定tag的所有请求

标签: android Picasso
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 0
博文 5
码字总数 5237
×
baochen
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: