android开源项目:图片下载缓存库picasso

picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能。

picasso有如下特性:

  • 在adapter中回收和取消当前的下载;
  • 使用最少的内存完成复杂的图形转换操作;
  • 自动的内存和硬盘缓存;
  • 图形转换操作,如变换大小,旋转等,提供了接口来让用户可以自定义转换操作;
  • 加载载网络或本地资源;
  • 可以转换为自己需要的request(Square公司开源的另一个网络支持库:retrofit支持转化json,protoc0l buffers).

1.picasso的简单使用

1 Picasso.with(context).load(url).placeholder(R.drawable.pic).error(R.drawable.pic).into(tagert);
需要注意:url为http链接时,load(url),当url为本地图片路径时load(new File(url)).

需要对图片简单处理:transform(Transformation);
如下是显示圆形图片

//重载函数
public Bitmap transform(Bitmap source) {
        int width = source.getWidth();
        int height = source.getHeight();

        int x = 0, y = 0;
        if (mSquareRound && width != height) {
            if (width < height) {
                y = (height - width)/2;
            } else {
                x = (width - height)/2;
            }
            width = height = Math.min(width, height);
            Bitmap tempSource = Bitmap.createBitmap(source, x, y, width, height);
            source.recycle();
            source = tempSource;
        }

        Bitmap output = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888);
        Paint paint = new Paint();
        paint.setDither(true);
        paint.setAntiAlias(true);
        BitmapShader shader = new BitmapShader(source, Shader.TileMode.CLAMP, Shader.TileMode.CLAMP);
        paint.setShader(shader);
        Canvas canvas = new Canvas(output);

        final RectF bounds = new RectF(0, 0, width, height);
        canvas.drawOval(bounds, paint);
        source.recycle();
        return output;
    }

transform(new RoundTransformation(true));

2.picasso的类图如下:

关键类的简单介绍:

Cache:缓存类,子类LruCache才采用Least Recently Used 近期最少使用算法,当然LinkedHashMap已实现这个策略,只需根据配置的缓存大小来trimToSize。

picass缓存策略单一,没有另一个图片下载缓存库Android-universal-Image-Loader 缓存策略丰富:FIFOLimitedMemoryCache
,LimitedAgeMemoryCache 等。

而本地文件缓存,picasso引用okhttp的文件缓存,而Android-universal-Image-Loader也不同几种文件缓存策略。

RequestCreator:Requst构建者,可以通过不同参数配置request请求。

Request:请求封装类,之后把所有对图形的操作都会记录在这里,供之后图形的创建使用,如重新计算大小,旋转角度,也可以自定义变换,只需要实现Transformation,一个bitmap转换的接口。传到另一个结构中Action。

Action:Action代表了一个具体的加载任务,主要用于图片加载后的结果回调,有两个抽象方法,complete和error.来通知上层。

BitmapHunter:一个runnable线程,网络下载耗工作线程,交给ExecutorServer管理执行。

Downloader:网络图片下载器,子类不同来选择http client。

RequestHandler:请求处理类,子类根据图片来源获取资源。

Dispathcer:任务调度器,调度和维护者actions 和 bitmapHunter,当bitmaphunter获取到图片时,会转给dispather,发送异步消息,最终会action.complete()或者action.error().

3.picasso.with(context).loar(http).into(imageview);流程图如下

4.使用picasso可能出现的问题:

1.图片有时会显示不了,查看应用中图片缓存文件,对一张图片,会生成两个文件:,.0文件保存了http响应相应的信息,.1文件时加密后的图片文件。.0文件的内容如下:

http://192.168.2.40:82/group1/M00/0A/60/wKgCKFQJQkKABEn9AAPhsEdiW-o.phpzqf
GET
0
HTTP/1.1 200 OK
9
Server: nginx/1.2.6
Date: Tue, 16 Sep 2014 12:02:26 GMT
Content-Length: 254384
Last-Modified: Fri, 05 Sep 2014 04:55:30 GMT
Connection: keep-alive
Accept-Ranges: bytes
OkHttp-Selected-Protocol: http/1.1
OkHttp-Sent-Millis: 1410868547182
OkHttp-Received-Millis: 1410868547357

这边出现问题时,Content-Length: 0,但是图片确实存在。如果出现有时显示不了,可以从这方面查看下。可行的方法:

定制Downloader,配置缓存目录和缓存大小。

2.当picasso显示列表中大量图片时,查看大图时,有时还是会出现oom,除了对长宽比压缩,也可以以另外一个进程查看大图。

时间: 2024-10-11 21:55:08

android开源项目:图片下载缓存库picasso的相关文章

毕加索的艺术——Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选

毕加索的艺术--Picasso,一个强大的Android图片下载缓存库,OkHttpUtils的使用,二次封装PicassoUtils实现微信精选 官网: http://square.github.io/picasso/ 我们在上篇OkHttp的时候说过这个Picasso,学名毕加索,是Square公司开源的一个Android图形缓存库,而且使用起来也是非常的简单,只要一行代码就轻松搞定了,你会问,为什么不介绍一下Glide?其实Glide我有时间也是会介绍的,刚好上篇我们用到了Picasso,

Android开源项目第二篇——工具库篇

本文为那些不错的Android开源项目第二篇——开发工具库篇,主要介绍常用的开发库,包括依赖注入框架.图片缓存.网络相关.数据库ORM建模.Android公共库.Android 高版本向低版本兼容.多媒体相关及其他. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和

picasso-强大的Android图片下载缓存库

编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能.仅仅只需要一行代码就能完全实现图片的异步加载: Picasso.with(context).load("http://i.imgur.com/

picasso_强大的Android图片下载缓存库

picasso是Square公司开源的一个Android图形缓存库,地址http://square.github.io/picasso/,可以实现图片下载和缓存功能.仅仅只需要一行代码就能完全实现图片的异步加载: 1 Picasso.with(context).load("http://i.imgur.com/DvpvklR.png").into(imageView); Api看起来非常独特,是吧. Picasso不仅实现了图片异步加载的功能,还解决了android中加载图片时需要解决

【转】Android开源项目 分类 便于查看

之前转载了一个开源项目的文章,发现那些都是没有系统的总结,这里又转载一篇有系统总结的文章. Android开源项目系列汇总已完成,包括: Android开源项目第一篇——个性化控件(View)篇 Android开源项目第二篇——工具库篇 Android开源项目第三篇——优秀项目篇 Android开源项目第四篇——开发及测试工具篇 Android开源项目第五篇——优秀个人和团体篇 Android开源项目第一篇——个性化控件(View)篇 主要介绍那些不错个性化的View,包括ListView.Ac

[转]Android开源项目分类汇总

我喜欢收集源码,如今这个时代,我觉得我们要做的不是做前人做过的事,而是学习他们的经验然后在这基础上创新做出更伟大的事. 转自https://github.com/Trinea/android-open-project Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView

GitHub上史上最全的Android开源项目分类汇总

今天在看博客的时候,无意中发现了@Trinea在GitHub上的一个项目Android开源项目分类汇总,由于类容太多了,我没有一个个完整地看完,但是里面介绍的开源项目都非常有参考价值,包括很炫的界面特效设计.个性化控件.工具库.优秀的Android开源项目.开发测试工具.优秀个人和团体等.可以这样说,每一位Andorid开发人员都能从中找到一个或多个适用自己项目的解决方案,消化吸收并加以利用,可以为自己的APP增色不少.文章最后还列出了部分国外著名Android开发者的信息,包括GitHub地址

【转】Android开源项目

Android开源项目第一篇——个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.其他Android开源项目第二篇——工具库篇  包括依赖注入.图片缓存.网络相关.数据库ORM工具包.Android公共库.高版本向低版本兼容库.多媒体.事件总线.传感器.安全.其他Android开源项目第三篇——优秀项目篇  比较有意思的完整的Android项目Andr

Android 开源项目分类汇总

目前包括: Android 开源项目第一篇--个性化控件(View)篇  包括ListView.ActionBar.Menu.ViewPager.Gallery.GridView.ImageView.ProgressBar.TextView.ScrollView.TimeView.TipView.FlipView.ColorPickView.GraphView.UI Style.其他Android 开源项目第二篇--工具库篇  包括依赖注入.图片缓存.网络请求.数据库 ORM 工具包.Andro