1.简介

Picasso是Square公司出品的一个强大的图片下载和缓存图片库
1)在adapter中需要取消已经不在视野范围的ImageView图片资源的加载,否则会导致图片错位,Picasso已经解决了这个问题。
2)使用复杂的图片压缩转换来尽可能的减少内存消耗
3)自带内存和硬盘二级缓存功能

2.基本用法

①普通加载图片

  1. Picasso.with(PicassoActivity.this)
  2.     .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
  3.     .into(ivPicassoResult1);

②裁剪的方式加载图片

  1. Picasso.with(PicassoActivity.this)
  2.     .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
  3.     .resize(100,100)
  4.     .into(ivPicassoResult1);  

③选择180度

  1. Picasso.with(PicassoActivity.this)
  2.     .load("http://n.sinaimg.cn/translate/20160819/9BpA-fxvcsrn8627957.jpg")
  3.     .rotate(180)
  4.     .into(ivPicassoResult1);

  

3.ListView资源加载的方法

- placeholder(xxx). 设置资源加载过程中的显示的Drawable。
- error(xxx).设置load失败时显示的Drawable。
- into(xxx) 设置资源加载到的目标 包括ImageView Target等

eg:Adapter中getView()方法中

  1. // 加载图片
  2. Picasso.with(mContext)
  3. .load(Constants.IMAGES[position])
  4. .placeholder(R.drawable.atguigu_logo)
  5. .error(R.drawable.atguigu_logo)
  6. .into(holder.iv);

  

4.常用工具类

  1. public class PicassoUtil {
  2. //加载本地图片
  3. public static void setImg(Context context, int resId, ImageView imgView){
  4. Picasso.with(context)
  5. .load(resId)
  6. .config(Bitmap.Config.RGB_565)//8位RGB位图
  7. .fit()
  8. .into(imgView);
  9. }
  10. //按照一定的宽高加载本地图片,带有加载错误和默认图片
  11. public static void setImg(Context context,int resId,ImageView imgView,int weight,int height){
  12. Picasso.with(context)
  13. .load(resId)//加载本地图片
  14. .config(Bitmap.Config.RGB_565)//8位RGB位图
  15. .resize(weight,height)//设置图片的宽高
  16. .into(imgView);//把图片加载到控件上
  17. }
  18. //加载网络图片到imgview,带有加载错误和默认图片
  19. public static void setImg(Context context, String imgurl, int resId, ImageView imgView){
  20. Picasso.with(context)
  21. .load(imgurl)//加载网络图片的url
  22. .config(Bitmap.Config.RGB_565)//8位RGB位图
  23. .placeholder(resId)//默认图片
  24. .error(resId)//加载错误的图片
  25. .fit()//图片的宽高等于控件的宽高
  26. .into(imgView);//把图片加载到控件上
  27. }
  28. public static void setImg(Context context, String imgurl, ImageView imgView){
  29. Picasso.with(context)
  30. .load(imgurl)//加载网络图片的url
  31. .config(Bitmap.Config.RGB_565)//8位RGB位图
  32. .fit()//图片的宽高等于控件的宽高
  33. .into(imgView);//把图片加载到控件上
  34. }
  35. //加载网络图片到Viewpager
  36. public static void setImg(Context context, String imgurl, ViewPager imgView){
  37. Picasso.with(context)
  38. .load(imgurl)//加载网络图片的url
  39. .config(Bitmap.Config.RGB_565)//8位RGB位图
  40. .fit()//图片的宽高等于控件的宽高
  41. .into((Target) imgView);//把图片加载到控件上
  42. }
  43. //加载网络图片到Viewpager,带有加载错误和默认图片
  44. public static void setImg(Context context, String imgurl, int resId, ViewPager imgView){
  45. Picasso.with(context)
  46. .load(imgurl)//加载网络图片的url
  47. .config(Bitmap.Config.RGB_565)//8位RGB位图
  48. .placeholder(resId)//默认图片
  49. .error(resId)//加载错误的图片
  50. .fit()//图片的宽高等于控件的宽高
  51. .into((Target) imgView);//把图片加载到控件上
  52. }
  53. //按照设定的宽高加载网络图片到imgview
  54. public static void setImg(Context context, String imgurl,ImageView imgView,int weight,int height){
  55. Picasso.with(context)
  56. .load(imgurl)//加载网络图片的url
  57. .config(Bitmap.Config.RGB_565)//8位RGB位图
  58. .resize(weight,height)//设置图片的宽高
  59. .into(imgView);//把图片加载到控件上
  60. }
  61. //按照设定的宽高加载网络图片到imgview,带有加载错误和默认图片
  62. public static void setImg(Context context, String imgurl, int resId,int weight,int height, ImageView imgView){
  63. Picasso.with(context)
  64. .load(imgurl)//加载网络图片的url
  65. .config(Bitmap.Config.RGB_565)//8位RGB位图
  66. .placeholder(resId)//默认图片
  67. .error(resId)//加载错误的图片
  68. .resize(weight,height)//设置图片的宽高
  69. .into(imgView);//把图片加载到控件上
  70. }
  71. }

PicassoUtil

5.图片变换

在module的gradle中添加转换库:

  1. dependencies {
  2. compile 'jp.wasabeef:picasso-transformations:2.1.0'
  3. // If you want to use the GPU Filters
  4. compile 'jp.co.cyberagent.android.gpuimage:gpuimage-library:1.4.1'
  5. }
  6.  
  7. repositories {
  8. jcenter()
  9. }

  

Activity中:

  1. List<String> data = new ArrayList<>();
  2. for (int i = 1; i<= 36; i++){
  3. data.add(i+"");
  4. }
  5. // 初始化listview
  6. PicassoTransformationsAdapter picassoTransformationsAdapter = new PicassoTransformationsAdapter(PicassoTransfromationsActivity.this,data);
  7. lvPicassoTransfromations.setAdapter(picassoTransformationsAdapter);

PicassoListviewAdapter:

  1. public class PicassoTransformationsAdapter extends BaseAdapter {
  2. private Context mContext;
  3. private List<String> mData;
  4.  
  5. public PicassoTransformationsAdapter(Context context, List<String> data) {
  6. mContext = context;
  7. mData = data;
  8. }
  9.  
  10. @Override
  11. public int getCount() {
  12. return mData == null ? 0 : mData.size();
  13. }
  14.  
  15. @Override
  16. public Object getItem(int position) {
  17. return null;
  18. }
  19.  
  20. @Override
  21. public long getItemId(int position) {
  22. return 0;
  23. }
  24.  
  25. @Override
  26. public View getView(int position, View convertView, ViewGroup parent) {
  27.  
  28. ViewHolder holder;
  29. if(convertView == null) {
  30. convertView = View.inflate(mContext, R.layout.item_picasso_transformations,null);
  31.  
  32. holder = new ViewHolder(convertView);
  33.  
  34. convertView.setTag(holder);
  35. }else {
  36. holder = (ViewHolder) convertView.getTag();
  37. }
  38.  
  39. // 显示名称
  40. holder.name.setText("item"+(position + 1));
  41.  
  42. int integer = Integer.parseInt(mData.get(position));
  43.  
  44. switch (integer) {
  45.  
  46. case 1: {
  47. int width = Utils.dip2px(mContext, 133.33f);
  48. int height = Utils.dip2px(mContext, 126.33f);
  49. Picasso.with(mContext)
  50. .load(R.drawable.check)
  51. .resize(width, height)
  52. .centerCrop()
  53. .transform((new MaskTransformation(mContext, R.drawable.mask_starfish)))
  54. .into(holder.image);
  55. break;
  56. }
  57. case 2: {
  58. int width = Utils.dip2px(mContext, 150.0f);
  59. int height = Utils.dip2px(mContext, 100.0f);
  60. Picasso.with(mContext)
  61. .load(R.drawable.check)
  62. .resize(width, height)
  63. .centerCrop()
  64. .transform(new MaskTransformation(mContext, R.drawable.chat_me_mask))
  65. .into(holder.image);
  66. break;
  67. }
  68. case 3:
  69. Picasso.with(mContext)
  70. .load(R.drawable.demo)
  71. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.LEFT,
  72. CropTransformation.GravityVertical.TOP))
  73. .into(holder.image);
  74. break;
  75. case 4:
  76. Picasso.with(mContext).load(R.drawable.demo)
  77. // 300, 100, CropTransformation.GravityHorizontal.LEFT, CropTransformation.GravityVertical.CENTER))
  78. .transform(new CropTransformation(300, 100)).into(holder.image);
  79. break;
  80. case 5:
  81. Picasso.with(mContext)
  82. .load(R.drawable.demo)
  83. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.LEFT,
  84. CropTransformation.GravityVertical.BOTTOM))
  85. .into(holder.image);
  86. break;
  87. case 6:
  88. Picasso.with(mContext)
  89. .load(R.drawable.demo)
  90. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.CENTER,
  91. CropTransformation.GravityVertical.TOP))
  92. .into(holder.image);
  93. break;
  94. case 7:
  95. Picasso.with(mContext)
  96. .load(R.drawable.demo)
  97. .transform(new CropTransformation(300, 100))
  98. .into(holder.image);
  99. break;
  100. case 8:
  101. Picasso.with(mContext)
  102. .load(R.drawable.demo)
  103. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.CENTER,
  104. CropTransformation.GravityVertical.BOTTOM))
  105. .into(holder.image);
  106. break;
  107. case 9:
  108. Picasso.with(mContext)
  109. .load(R.drawable.demo)
  110. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
  111. CropTransformation.GravityVertical.TOP))
  112. .into(holder.image);
  113. break;
  114. case 10:
  115. Picasso.with(mContext)
  116. .load(R.drawable.demo)
  117. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
  118. CropTransformation.GravityVertical.CENTER))
  119. .into(holder.image);
  120. break;
  121. case 11:
  122. Picasso.with(mContext)
  123. .load(R.drawable.demo)
  124. .transform(new CropTransformation(300, 100, CropTransformation.GravityHorizontal.RIGHT,
  125. CropTransformation.GravityVertical.BOTTOM))
  126. .into(holder.image);
  127. break;
  128. case 12:
  129. Picasso.with(mContext)
  130. .load(R.drawable.demo)
  131. .transform(new CropTransformation((float) 16 / (float) 9,
  132. CropTransformation.GravityHorizontal.CENTER,
  133. CropTransformation.GravityVertical.CENTER))
  134. .into(holder.image);
  135. break;
  136. case 13:
  137. Picasso.with(mContext)
  138. .load(R.drawable.demo)
  139. .transform(new CropTransformation((float) 4 / (float) 3,
  140. CropTransformation.GravityHorizontal.CENTER,
  141. CropTransformation.GravityVertical.CENTER))
  142. .into(holder.image);
  143. break;
  144. case 14:
  145. Picasso.with(mContext)
  146. .load(R.drawable.demo)
  147. .transform(new CropTransformation(3, CropTransformation.GravityHorizontal.CENTER,
  148. CropTransformation.GravityVertical.CENTER))
  149. .into(holder.image);
  150. break;
  151. case 15:
  152. Picasso.with(mContext)
  153. .load(R.drawable.demo)
  154. .transform(new CropTransformation(3, CropTransformation.GravityHorizontal.CENTER,
  155. CropTransformation.GravityVertical.TOP))
  156. .into(holder.image);
  157. break;
  158. case 16:
  159. Picasso.with(mContext)
  160. .load(R.drawable.demo)
  161. .transform(new CropTransformation(1, CropTransformation.GravityHorizontal.CENTER,
  162. CropTransformation.GravityVertical.CENTER))
  163. .into(holder.image);
  164. break;
  165. case 17:
  166. Picasso.with(mContext)
  167. .load(R.drawable.demo)
  168. .transform(new CropTransformation((float) 0.5, (float) 0.5,
  169. CropTransformation.GravityHorizontal.CENTER,
  170. CropTransformation.GravityVertical.CENTER))
  171. .into(holder.image);
  172. break;
  173. case 18:
  174. Picasso.with(mContext)
  175. .load(R.drawable.demo)
  176. .transform(new CropTransformation((float) 0.5, (float) 0.5,
  177. CropTransformation.GravityHorizontal.CENTER,
  178. CropTransformation.GravityVertical.TOP))
  179. .into(holder.image);
  180. break;
  181. case 19:
  182. Picasso.with(mContext)
  183. .load(R.drawable.demo)
  184. .transform(new CropTransformation((float) 0.5, (float) 0.5,
  185. CropTransformation.GravityHorizontal.RIGHT,
  186. CropTransformation.GravityVertical.BOTTOM))
  187. .into(holder.image);
  188. break;
  189. case 20:
  190. Picasso.with(mContext)
  191. .load(R.drawable.demo)
  192. .transform(new CropTransformation((float) 0.5, 0, (float) 4 / (float) 3,
  193. CropTransformation.GravityHorizontal.CENTER,
  194. CropTransformation.GravityVertical.CENTER))
  195. .into(holder.image);
  196. break;
  197. case 21:
  198. Picasso.with(mContext)
  199. .load(R.drawable.demo)
  200. .transform(new CropSquareTransformation())
  201. .into(holder.image);
  202. break;
  203. case 22:
  204. Picasso.with(mContext)
  205. .load(R.drawable.demo)
  206. .transform(new CropCircleTransformation())
  207. .into(holder.image);
  208. break;
  209. case 23:
  210. Picasso.with(mContext)
  211. .load(R.drawable.demo)
  212. .transform(new ColorFilterTransformation(Color.argb(80, 255, 0, 0)))
  213. .into(holder.image);
  214. break;
  215. case 24:
  216. Picasso.with(mContext)
  217. .load(R.drawable.demo)
  218. .transform(new GrayscaleTransformation())
  219. .into(holder.image);
  220. break;
  221. case 25:
  222. Picasso.with(mContext)
  223. .load(R.drawable.demo)
  224. .transform(new RoundedCornersTransformation(30, 0,
  225. RoundedCornersTransformation.CornerType.BOTTOM_LEFT))
  226. .into(holder.image);
  227. break;
  228. case 26:
  229. Picasso.with(mContext)
  230. .load(R.drawable.check)
  231. .transform(new BlurTransformation(mContext, 25, 1))
  232. .into(holder.image);
  233. break;
  234. case 27:
  235. Picasso.with(mContext)
  236. .load(R.drawable.demo)
  237. .transform(new ToonFilterTransformation(mContext))
  238. .into(holder.image);
  239. break;
  240. case 28:
  241. Picasso.with(mContext)
  242. .load(R.drawable.check)
  243. .transform(new SepiaFilterTransformation(mContext))
  244. .into(holder.image);
  245. break;
  246. case 29:
  247. Picasso.with(mContext)
  248. .load(R.drawable.check)
  249. .transform(new ContrastFilterTransformation(mContext, 2.0f))
  250. .into(holder.image);
  251. break;
  252. case 30:
  253. Picasso.with(mContext)
  254. .load(R.drawable.check)
  255. .transform(new InvertFilterTransformation(mContext))
  256. .into(holder.image);
  257. break;
  258. case 31:
  259. Picasso.with(mContext)
  260. .load(R.drawable.check)
  261. .transform(new PixelationFilterTransformation(mContext, 20))
  262. .into(holder.image);
  263. break;
  264. case 32:
  265. Picasso.with(mContext)
  266. .load(R.drawable.check)
  267. .transform(new SketchFilterTransformation(mContext))
  268. .into(holder.image);
  269. break;
  270. case 33:
  271. Picasso.with(mContext)
  272. .load(R.drawable.check)
  273. .transform(new SwirlFilterTransformation(mContext, 0.5f, 1.0f, new PointF(0.5f, 0.5f)))
  274. .into(holder.image);
  275.  
  276. break;
  277. case 34:
  278. Picasso.with(mContext)
  279. .load(R.drawable.check)
  280. .transform(new BrightnessFilterTransformation(mContext, 0.5f))
  281. .into(holder.image);
  282. break;
  283. case 35:
  284. Picasso.with(mContext)
  285. .load(R.drawable.check)
  286. .transform(new KuwaharaFilterTransformation(mContext, 25))
  287. .into(holder.image);
  288. break;
  289. case 36:
  290. Picasso.with(mContext)
  291. .load(R.drawable.check)
  292. .transform(new VignetteFilterTransformation(mContext, new PointF(0.5f, 0.5f),
  293. new float[]{0.0f, 0.0f, 0.0f}, 0f, 0.75f))
  294. .into(holder.image);
  295. break;
  296. }
  297.  
  298. return convertView;
  299. }
  300.  
  301. class ViewHolder{
  302.  
  303. @Bind(R.id.iv_picasso)
  304. ImageView image;
  305.  
  306. @Bind(R.id.tv_picasso)
  307. TextView name;
  308.  
  309. public ViewHolder(View view) {
  310.  
  311. ButterKnife.bind(this, view);
  312. }
  313. }
  314. }

  

Picasso的更多相关文章

  1. 第一次源码分析: 图片加载框架Picasso源码分析

    使用: Picasso.with(this) .load("http://imgstore.cdn.sogou.com/app/a/100540002/467502.jpg") . ...

  2. Picasso设置圆角

    package liu.roundimagedemo.view; import android.graphics.Bitmap; import android.graphics.BitmapShade ...

  3. Android 三大图片加载框架的对比——ImageLoader,Picasso,Glide

    一.ImageLaoder介绍 << Universal ImageLoader 是很早开源的图片缓存,在早期被很多应用使用 多线程下载图片,图片可以来源于网络,文件系统,项目文件夹ass ...

  4. 8.4.4 Picasso

    Picasso 收到加载及显示图片的任务,创建 Request 并将它交给 Dispatcher,Dispatcher 分发任务到具体 RequestHandler,任务通过 MemoryCache ...

  5. picasso总结

    public class UMDocApplication extends Application { private Picasso picasso = null; /**获取Picasso对象** ...

  6. 图片加载框架Picasso解析

    picasso是Square公司开源的一个Android图形缓存库 主要有以下一些特性: 在adapter中回收和取消当前的下载: 使用最少的内存完成复杂的图形转换操作: 自动的内存和硬盘缓存: 图形 ...

  7. Android图片加载库:最全面的Picasso讲解

    前言 上文已经对当今 Android主流的图片加载库 进行了全面介绍 & 对比 如果你还没阅读,我建议你先移步这里阅读 今天我们来学习其中一个Android主流的图片加载库的使用 - Pica ...

  8. Android之Picasso --zz

    简介: Picasso是Square公司开源的一个Android图形缓存库.可以实现图片下载和缓存功能. 特点: 1.加载载网络或本地图片并自动缓存处理: 2.链式调用: 3.图形转换操作,如变换大小 ...

  9. Android开源框架——Picasso

    开篇——介绍Picasso (Picasso是什么?)Picasso:A Powerfull Image Downloading and Caching Library for Android,即An ...

随机推荐

  1. javap生成的字节码

    https://www.zhihu.com/question/49470442/answer/135812845http://blog.csdn.net/tzs_1041218129

  2. php报错: PHP Warning: PHP Startup: memcache: Unable to initialize module

    在mac上通过brew 安装php的memcache扩展(brew install php56-memcache)后运行 ~  php -mPHP Warning:  PHP Startup: mem ...

  3. iBatis.Net(C#)系列Demo源码

    iBatis.Net(C#)系列一:简介及运行环境源码  [下载] iBatis.Net(C#)系列二:SQL数据映射源码 [下载] iBatis.Net(C#)系列三:数据库查询源码  [下载]

  4. IOS中多版本,多设备类型支持注意事项

    IOS系统从07年出来,到现在也有6年了,每年发布一次到两次新的设备,从iPhone1,iPhone2 ... iPhone4s再到最新的iPhone5.硬件在升级的过程中CPU的架构也可能发生变化, ...

  5. Qt的零碎知识

    1.QObject是所有Qt对象的基类,他给C++的类带来了若干新的功能.使用Q_OBJECT宏能声明一个C++类为一个QObject.如: class Notepad : public QMainW ...

  6. Struts2知多少(2) Struts2 是什么

    Struts2是流行和成熟的基于MVC设计模式的Web应用程序框架. Struts2不只是Struts1下一个版本,它是一个完全重写的Struts架构. WebWork框架开始以Struts框架为基础 ...

  7. Android加载SO库UnsatisfiedLinkError错误的原因及解决方案

    Android 应用开发者应该对 UnsatisfiedLinkError 这种类型的错误比较熟悉了,这个问题一直困扰着广大的开发者,那么有没有想过有可能你什么都没做错,也会出现这个问题呢? 我们在 ...

  8. Unity3D内置着色器

    Unity内部提供了一些可以直接使用的着色器,这些内置着色器包括以下6个方面: (1)Performance of Unity shaders 着色器的性能和两个方面有关:shader本身和rende ...

  9. Lua中的weak表——weak table

    弱表(weak table)是一个很有意思的东西,像C++/Java等语言是没有的.弱表的定义是:A weak table is a table whose elements are weak ref ...

  10. DDD:Command模式的好处

    背景 会有朋友问我为啥用命令模式(Command Pattern)组织应用层,先看看MartinFowler咋说:http://martinfowler.com/bliki/CommandOrient ...