文档章节

Picasso的使用介绍

baochen
 baochen
发布于 2017/05/02 22:33
字数 1431
阅读 39
收藏 0

什么是 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的所有请求

© 著作权归作者所有

共有 人打赏支持
baochen
粉丝 0
博文 6
码字总数 5237
作品 0
贵阳
Android - 图片处理之Picasso

老婆保佑,代码无BUG 前言 准备写的 ,但是我发现有人写的很详细,很认真,所以 这里直接给出链接地址,写的很详细,具体的介绍,可以参考连接, 带你全方位学习Picasso(一) 带你全方位学习...

Allens_Jiang
01/05
0
0
Android Picasso

官网: http://square.github.io/picasso/ How to retrieve Bitmap with Picasso ? http://stackoverflow.com/questions/20181491/use-picasso-to-get-a-callback-with-a-bitmap Picasso框架......

当空皓月
2016/03/17
93
0
Android Picasso最详细的使用指南

Picasso 是Square 公司开源的Android 端的图片加载和缓存框架。Square 真是一家良心公司啊,为我们Android开发者贡献了很多优秀的开源项目有木有!像什么Rerefoit 、OkHttp、LeakCanary、Pic...

记录自己的点点滴滴
08/03
0
0
Android网络框架

Android OKHttp3.0 以上使用方法 Android OKHttp3.0 以上使用方法详解 Retrofit 之日志拦截 Retrofit 日志拦截相关介绍 Retrofit源码解析 Retrofit的源码分析将从基本的使用方法入手,分析r...

掘金官方
2017/12/12
0
0
Picasso detected an unsupported OkHttp on the ...

http://stackoverflow.com/questions/24125856/picasso-detected-an-unsupported-okhttp-on-the-classpath https://github.com/square/picasso/issues/541 如果使用Picasso同时也使用了okhtt......

tyronejw
2015/12/31
69
0

没有更多内容

加载失败,请刷新页面

加载更多

Kali Linux Docker 練習

docker pull kalilinux/kali-linux-docker docker run -t -i kalilinux/kali-linux-docker /bin/bash apt-get update apt-get install htop apt-get install nmap apt-get install wpscan ap......

BaiyuanLab
23分钟前
0
0
通俗大白话来理解TCP协议的三次握手和四次分手

最近在恶补计算机网络方面的知识,之前对于TCP的三次握手和四次分手也是模模糊糊,对于其中的细节更是浑然不知,最近看了很多这方面的知识,也在系统的学习计算机网络,加深自己的CS功底,就...

onedotdot
29分钟前
1
0
TiDB 在爱奇艺的应用及实践

爱奇艺,中国高品质视频娱乐服务提供者,2010 年 4 月 22 日正式上线,推崇品质、青春、时尚的品牌内涵如今已深入人心,网罗了全球广大的年轻用户群体,积极推动产品、技术、内容、营销等全方...

TiDB
33分钟前
0
0
Web系统大规模并发:电商秒杀与抢购

一、大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战。如果Web系统不做针对性的优化,会轻而易举地陷入到异常...

xtof
今天
3
0
代码质量管理平台-sonarqube

在工作中,往往开发的时候会不怎么注重代码质量的人很多,存在着很多的漏洞和隐患等问题,sonarqube可以进行代码质量的审核,而且十分的残酷。。。。。接下来我们说下怎么安装 进入官网下载:...

落叶清风
今天
9
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部