快速上手Picasso,玩转Android图像加载
2018-01-23 23:45
477 查看
1. 写在前面
本文主要来自Picasso的官方文档的翻译,地址为:http://square.github.io/picasso/,然后自己进行了学习和实践加简单封装(PS:其实这个封装是功能的封装,没有多大的意义,因为人家Picasso已经封装的很好了,行此一举无非是熟悉它的功能罢了!),内容仅供参考,不足之处望请指正。此外,个人比较喜欢英语,虽然不是专业的高手、只有六级水平;但是凭借一颗爱好英语的心,应该能翻的八九不离十,因为还是有【实践】撑腰的嘛!再者作为一个程序猿阅读外文的技术文档是少不了的,为此刚开始的翻译应从从简单的技术文档着手,虽然Picasso大家已经非常熟悉了(因为问世挺久的了),但难免有像我一样刚接触不久的,或是将来需要接触的同行们,能为他们提供一点点帮助也是笔者莫大的荣幸。
2.正文: Picasso — 一个强大的Android图片下载和缓存库
1.简介
只需要给您的Android应用程序添加必要的【上下文环境】和【视觉图像】,Picasso就能让你非常轻松的能把图片加载到你的App上———通常一行代码就能搞定!Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView);
在Android里许多图片加载中遇到的异常都是由Picasso自动处理的,比如:
在你的adapter适配器中自动处理ImageView组件上图片资源的回收和加载。
在尽可能小的内存消耗下使用复杂的图像转换。
自动进行内存和磁盘的缓存。
2.特征功能点
(1)在adapter适配器中的加载图片:
adapter的的复用是由Picasso自动检测的并且会自动取消上一次的加载。(PS:我们一般会使用ListView/GridView/RecycleView等等去显示一些信息,一般是在adapter中会有加载图片的需求,其实核心代码就一行,也是最简单的加载方式,不做任何操作的默认加载。)@Override public void getView(int position, View convertView, ViewGroup parent) { SquaredImageView view = (SquaredImageView) convertView; if (view == null) { view = new SquaredImageView(context); } String url = getItem(position); //【核心代码】 Picasso.with(context).load(url).into(view); }
(2.1)图像变换
变换图像以便更好地适应你的布局和减少内存消耗。(即:指定目标资源宽高来进行图像变换)Picasso.with(context) .load(url) .resize(50, 50) a4da .centerCrop() .into(imageView)
(2.2)您还可以通过制定自定义的变换或裁剪来达到更完美的适应效果。
(PS:下面的代码功能是裁剪成了正方形)public class CropSquareTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight()); int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; Bitmap result = Bitmap.createBitmap(source, x, y, size, size); if (result != source) { source.recycle(); } return result; } @Override public String key() { return "square()"; } }
(3)占位符(图片)
Picasso同时支持下载未完成和下载错误两种占位符供用户进行选择。(即:无论加载是否成功都有一张备用的图片显示出来,不会太尴尬。)Picasso.with(context) .load(url) .placeholder(R.drawable.user_placeholder) .error(R.drawable.user_placeholder_error) .into(imageView);
**重点内容**PS:一次图片的加载如果失败的话,会有三次机会重新再尝试,三次都失败的话,占位图片就会被显示出来。
(4)资源的加载
Picasso不仅仅可以加载网上的资源,Resources, assets, files, content providers都可以作为图片的资源,比如:Picasso.with(context).load(R.drawable.landing_screen).into(imageView1); Picasso.with(context).load("file:///android_asset/DvpvklR.png").into(imageView2); Picasso.with(context).load(new File(...)).into(imageView3);
(5)调试指示器
为了开发的方便的话,你可以开始指示器显示一个颜色功能区(在图片的左上角),这个功能区会告诉你图片的来源是【网络(红色】)、【磁盘(蓝色)】亦或是【内存(绿色)】。再创建Piacsso的实例之后,就可以调用setIndicatorsEnabled(true)这个方法来实现这个小功能。Picasso picasso = Picasso.with(this); //开启指示器 picasso.setIndicatorsEnabled(true); Picasso.with(context).load(R.drawable.landing_screen).into(imageView4);
3.下载
最新jar包的下载地址:picasso-2.5.2.jar
Picasso的源代码、它的例子Demo以及这个网站网址都可以在Github上获取到。Maven
<dependency> <groupId>com.squareup.picasso</groupId> <artifactId>picasso</artifactId> <version>(insert latest version)</version> </dependency>
Gradle
compile 'com.squareup.picasso:picasso:(insert latest version)'
3.简单封装
PS:其实这个封装是功能的封装,没有多大的意义,因为人家Picasso已经封装的很好了,行此一举无非是熟悉它的功能罢了!public class PicassoUtils { /** * (1)不做任何修改去加载图片 * * @param context 上下文环境 * @param url 网络图片资源url * @param imageView 需要被用来显示的ImageView控件 */ public static void defaultLoadedImage(Context context, String url, ImageView imageView) { Picasso.with(context) .load(url). into(imageView); } /** * (2.1)指定目标资源宽高的图像变换 * * @param context 上下文环境 * @param url 网络图片资源url * @param width 目标资源的宽 * @param height目标资源的高 * @param imageView 需要被用来显示的ImageView控件 */ public static void specifyWidthAndHeightLoadImage(Context context, String url, int width, int height, ImageView imageView) { Picasso.with(context) .load(url) .resize(width, height) .centerCrop() .into(imageView); } /** * (2.2)通过制定自定义的变换或裁剪 * * @param context 上下文环境 * @param url 网络图片资源url * @param imageView 需要被用来显示的ImageView控件 */ public static void diyLoadedImage(Context context, String url, ImageView imageView) { Picasso.with(context) .load(url) .transform(new CropSquareTransformation()) .into(imageView); } /** * 裁剪成了矩形(这里是正方形) */ public static class CropSquareTransformation implements Transformation { @Override public Bitmap transform(Bitmap source) { int size = Math.min(source.getWidth(), source.getHeight());//尺寸取图片长宽的最小值 int x = (source.getWidth() - size) / 2; int y = (source.getHeight() - size) / 2; //Bitmap source, int x, int y, int width, int height (可以自己调整的宽高) Bitmap result = Bitmap.createBitmap(source, x, y, size, size); if (result != source) { source.recycle(); } return result; } @Override public String key() { return "square()"; } } /** * (3)带有占位图片方式去加载图片 * * @param context 上下文环境 * @param url 网络图片资源url * @param correctImage 加载成功时显示的图片 * @param errorImage 加载失败时显示的图片 * @param imageView需要被用来显示的ImageView控件 */ public static void loadImageWithPlaceHolder(Context context, String url, int correctImage, int errorImage, ImageView imageView) { Picasso.with(context) .load(url) .placeholder(correctImage) .error(errorImage) .into(imageView); } /** * (4)是否打开调式指示器 * * @param context 上下文环境 * @param open 是否打开,true:打开;false:关闭 */ public static void isOpenIndicators(Context context, boolean open) { Picasso picasso = Picasso.with(context); picasso.setIndicatorsEnabled(open); } }
相关文章推荐
- Android快速SDK(7)图像加载库ImageLoader【傻瓜模式】
- Android图片加载库—Picasso一个强大的图像下载和缓存库
- .Net程序员玩转Android系列之三~快速上手
- 【转】.Net程序员玩转Android系列之三~快速上手
- .Net程序员玩转Android系列之三~快速上手(转)
- .Net程序员玩转Android系列之三~快速上手
- Android图片加载库:Picasso讲解
- Android图片加载框架:玩转Glide的回调与监听
- Android网络加载框架:Picasso简介
- 快速上手Android数据库操作
- Android图片加载框架分析之Glide、Picasso和Fresco
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较
- Universal-Image-Loader,android-Volley,Picasso、Fresco和Glide五大Android开源组件加载网络图片的优缺点比较
- android快速上手(二)android开发环境搭建及hello world
- 构建工具的发展及Android Gradle快速上手
- Android异步加载图像小结 (含线程池,缓存方法)
- android-Picasso请求https加载网络图片不能显示的解决方案
- Android 多种方式正确的加载图像,有效避免oom
- Android框架 加载图片 库 Picasso 的使用简介
- 玩转 Android MediaPlayer之视频预加载