文档章节

Picasso的使用介绍

baochen
 baochen
发布于 2017/05/02 22:33
字数 1431
阅读 33
收藏 0
点赞 0
评论 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网络框架

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
Android图片加载框架:Glide的常用用法|SquirrelNote

我的系列文章 Android图片加载框架:Glide的常用用法|SquirrelNote Android图片加载框架:Glide源码解析|SquirrelNote 前言 现在Android上的图片加载框架非常成熟,从最早的图片加载框架Uni...

跳动的松鼠
2017/11/18
0
0
使用自定义的Picasso导致程序崩溃问题

程序打印的错误日志基本都是与Surface unlock相关,但程序并没有操作Surface。看到日志几次打印:Looper﹕ Could not create wake pipe. errno=24,引起注意,猜想是读写文件报的错误。但没有...

哦_呢称
2016/06/19
199
0
使用Picasso加载图片的内存优化实践

0 说明 现在Android开源库中有许多图片加载框架,本文以picasso为例,总结下开发过程中的一些优化经验,使用的picasso版本如下 compile 'com.squareup.picasso:picasso:2.5.2' 1 图片裁剪 在...

海阔天空玩世不恭
2016/04/21
63
0
开源选型之 Android 三大图片缓存原理、特性对比

这是我在 MDCC 上分享的内容(略微改动),也是源码解析第一期发布时介绍的源码解析后续会慢慢做的事。 从总体设计和原理上对几个图片缓存进行对比,没用到他们的朋友也可以了解他们在某些特性...

iSnowFlake
2015/10/21
97
0
源码阅读系列:Picasso源码阅读

Android开发中,我们经常用到各种开源框架,很多优秀的框架不仅提供了功能丰富的功能接口,其高超的代码编写和组织水平也值得我们学习。通过学习这些框架的源码,有助于快速提高我们的编程质...

JackMeGo
2017/03/06
0
0
Android 卡片 UI 库--Card Library

cardslib 是由 Gabriele Mariotti 开发的一个为开发者方便实现各种 Card UI 的Android开源代码库,使用它你可以显示 single cards, list of cards and a grid of Cards。 昨天我在微信公号‘...

红薯
2013/12/25
7.7K
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

java按比例之原图生成缩略图

package com.wxp.test; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.FileOutputStream; import javax.imageio.ImageIO; import sun.......

恋码之子
6分钟前
0
0
SpringCloud 微服务 (十五) 服务容错 Hystrix

壹 工作中的微服务架构,某个服务通常会被多个服务调用或者多层调用完成需求,如果某个服务不可用,导致一个系统功能不可用或者服务直接没用了的情况,这种情况称为雪崩效应 有A服务调用B服务,B服...

___大侠
8分钟前
0
0
Spring框架中的设计模式(五)

Spring框架中的设计模式(五) 通过以前的4篇文章,我们看到Spring采用了大量的关于创建和结构方面的设计模式。本文将描述属于行为方面的两种设计模式:命令和访问者。 前传: Spring框架中的...

瑞查德-Jack
11分钟前
0
0
解决phpstorm运行很卡问题!

phpStorm一旦达到这个临界值,所有智能提示、自动补全都失效了 这TM就很尴尬了,顿时感觉自己就是个废人了,纯手写代码跟便秘一样 众所周知phpStorm基于JAVA,那么这个内存限制肯定跟JAVA的虚...

sjcehui2010
13分钟前
0
0
javascript前端AES加密解密

参考了一下网上的代码加上自已的一些想法,修改,key也可以是中文, 要引入一个aes.js的js文件。 html代码 <html> <head> <title>AES加解密</title> <meta http-equiv="Content-Type"......

oisan_
17分钟前
0
0
MacOS和Linux内核的区别

有些人可能认为MacOS和Linux内核有相似之处,因为它们可以处理类似的命令和类似的软件。甚至有人认为苹果的MacOS是基于linux的。事实上,这两个内核的历史和特性是非常不同的。今天,我们来看...

六库科技
21分钟前
0
0
Vue.js-自定义事件例子

自定义组件的 v-model 2.2.0+ 新增 一个组件上的 v-model 默认会利用名为 value 的 prop 和名为 input 的事件,但是像单选框、复选框等类型的输入控件可能会将 value 特性用于不同的目的。m...

tianyawhl
25分钟前
0
0
mybatis中获取sqlSession的源码分析

0 SqlSessionFactoryBuilder类 SqlSessionFactoryBuilder sqlSessionFacotory=SqlSessionFactoryBuilder().build(reader) public SqlSessionFactory build(Reader reader) { return build(re......

writeademo
25分钟前
0
0
RobotThread.cpp

#include "RobotThread.h"RobotThread::RobotThread(int argc, char** pArgv, const char * topic) :m_Init_argc(argc), m_pInit_argv(pArgv), m_topic(topic){/** ......

itfanr
28分钟前
0
0
防御ddos攻击的常见方法

DDoS攻击是一种特殊形式的拒绝服务攻击。它利用多台已经被攻击者所控制的机器对某一台单机发起攻击,在带宽相对的情况下,被攻击的主机很容易失去反应能力。分布式拒绝服务攻击(DDoS) 是一种...

上树的熊
28分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部