Fresco的简单实用教程

转载 2015年11月19日 14:56:16

Android最好用、最强大的图片加载框架:Fresco的简单实用教程

貌似有2个月没写博客了,原因还跟以往一样,忙+懒,其实二者是相辅相成的,忙的时候要想抽点时间也还是有的,但一忙就懒得管工作以外的事情了,一来二去也就会拖延很久。最近把公司项目中的图片加载框架由Universal-Image-Loader换成了Fresco,感觉有必要做个记录。

一个内容充实的应用,图片是必不可少的。而图片往往体积比较大,从服务器下载图片那肯定是要用异步线程来做的,在UI主线程中尽量不做任何耗时操作是每个Android开发者应该遵循的准则。你可以自己来写如何加载图片,但多数开发者的能力可能不足以完成一个足够好的图片加载框架,好在网上资源丰富,已经有好几个开源的图片加载框架供我们选择,它们都能比较好的满足我们的需求,可以让开发者不用太专注于图片的处理。比较有名的有Universal-Image-Loader、Picasso、Volley,以及今天的主角——Fresco。

要说,我们项目中原来Universal-Image-Loader用的也好好的,没什么问题,但有更好的技术还是要及时跟进的。Fresco是Facebook发布的一款开源框架,号称是目前最强的Android图片加载库,在内存方面的表现极为优秀,既然有如此信心,那么至少我应该先尝试一下,若真的好用,就替换掉UIL了。

对于Fresco的一些介绍,就不多说了,如果你感兴趣肯定会到网上找一些相关的资料,建议你到官网查看:http://frescolib.org/。当然了,国内的大神也对这个网站进行了翻译,如果你英语水平比较捉急,请到http://fresco-cn.org/来进行观摩,不过还是建议到官网,因为你不知道什么时候会有更新,第三方的文档会不及时。

下面直接来一段代码吧,看过就知道Fresco用起来是多么简单了:

记住,要想在项目中引入Fresco,只需要在Module的build.gradle文件的dependencies中添加一句话:

至于Eclipse的用户,呃,请自己到官网进行观摩,有教程,但你真的还要对Android Studio视而不见继续用Eclipse么……

主Activity代码:

相对应的布局文件:

程序的运行截图如下:

FrescoDemo运行图

FrescoDemo运行图

看得出来,Fresco的一个很大的特点在于,它自定义了一个SimpleDraweeView,而不是直接在ImageView上进行操作。你可能会觉得这样有些麻烦,毕竟人家UIL是直接用普通的ImageView的,但Facebook这么做是有其道理的。如果你有兴趣,查看一下源码,看得出来目前SimpleDraweeView是继承自ImageView的,然而很多ImageView的方法已经被@Deprecated掉了,不建议使用,而且其开发人员也表示今后的版本中,Fresco的SimpleDraweeView将会直接继承自View,与ImageView再无关系。

使用Fresco有一些需要注意的地方:

1、一定不要忘了Fresco库的初始化:

通常这一句将在Application的onCreate中是比较合适的,如果只有一个Activity,那么加在Activity里也可以,但要在setContentView之前,也就是要先初始化库,才能完成布局文件的加载。

  • SimpleDraweeView的width和height属性必须是明确值,而不能直接用wrap_content这种内容填充的数值,当然有一种情况例外,就是宽度和高度有一个是固定的,然后设置了二者的比例,则另一个可以用wrap_content,其实相当于二者都是固定的。

3、正常情况下,一个SimpleDraweeView的各种属性,既可以在布局文件里面设置(如上面的代码),也可以在Java代码里设置,作用是一样的。但既然提到了“正常情况”,那就必然有非正常情况了:当SimpleDraweeView被被一些第三方自定义View包裹的时候,比如最常见的,一个可下拉刷新的第三方ListView,则此时在布局文件中的一些属性居然是无效的!好吧,根本原因我并没有找到,只能在代码里面设置属性了,仍然没有任何难度:

一般来说,安全起见,还是直接在Java代码里写比较好,布局文件里面只是声明一个SimpleDraweeView就足够了。

4、不要使用那些被@Deprecated的方法,尽管这些方法(如setImageResource或者setImageBitmap)是可用的,但在以后的版本中也许就作废了。Fresco的建议是,直接用setImageURI的方法来设置图片,即使是本地的图片也用这种方法。

今天只写了Fresco的最基本的用法,实际上可能很多人比较关心它的性能到底有多么出色,那么以后我会用它来跟Universal-Image-Loader还有Picasso进行对比,这样你就能知道,为什么要选择Fresco了。

一、Fresco的使用简单介绍

前言:第一次翻译,若有失误,请轻拍....... Fresco 是facebook开源的Android图形加载库,github地址在  https://github.com/facebook/fres...
  • u013384823
  • u013384823
  • 2015年04月08日 14:10
  • 3450

Fresco图片加载框架一些简单使用

//图片缓存SimpleDraweeView photoIV;String imgUrl;View itemView;//初始化配置设置默认图等photoIV.setHierarchy(createV...
  • u014687525
  • u014687525
  • 2016年09月28日 11:23
  • 829

《Java 2 实用教程》读书笔记(四)4.4

第4章  类、对象和接口 1. 实例变量和类变量的区别:     如果类中的成员变量有类变量,那么所有对象的这个类变量都分配给相同的一处内存,改变其中一个对象的这个类变量会影响其他对象的这个类变量...
  • u010275636
  • u010275636
  • 2016年03月25日 15:52
  • 173

Mysql实用教程---郑阿奇

JDBC数据库接口  1.由java Soft公司开发的,
  • u012410724
  • u012410724
  • 2014年11月05日 19:00
  • 901

Fresco的缓存机制

Fresco的图片获取及缓存由ImagePipeline模块实现,具体见下图: 图1 三级缓存三级缓存1.Bitmap缓存Bitmap缓存存储Bitmap对象,这些Bitmap对象可以立刻用来...
  • lufqnuli
  • lufqnuli
  • 2016年06月12日 16:36
  • 4688

Fresco图片框架内部实现原理探索

流行的网络框架目前流行的网络图片框架: Picasso、Universal Image Loader、Volley的(ImageLoader、NetworkImageView)、Glide和Fres...
  • u010687392
  • u010687392
  • 2016年01月04日 18:38
  • 9721

Fresco特性与性能分析

Facebook于今年开源了一个非常强大的图片加载组件,Fresco。https://github.com/facebook/fresco主要有以下一些特性:内存管理  对于Android平台来说,图...
  • Pro_Vinny
  • Pro_Vinny
  • 2015年12月15日 21:23
  • 1578

JSP大学实用教程(第2版)代码一

由于书本上的代码直接运行会有些小问题,所以贴一些改过的代码。 十九页【例2-9】 Input.jsp pagelanguage="java"import="java.util.*"pageE...
  • jx370
  • jx370
  • 2016年04月13日 13:22
  • 322

Java程序设计实用教程(第四版,叶贺亚)考试复习题-纯属个人思想

这个是我大二下学期写的作业,说实在的我还有点不想写,毕竟太简单。
  • hncu1306602liuqiang
  • hncu1306602liuqiang
  • 2015年06月29日 16:35
  • 2437

Android图片加载神器之Fresco,基于各种使用场景的讲解

转载请标明出处:http://blog.csdn.net/android_ls/article/details/53137867Fresco是Facebook开源Android平台上一个强大的图片加载...
  • android_ls
  • android_ls
  • 2016年11月12日 18:13
  • 18425
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Fresco的简单实用教程
举报原因:
原因补充:

(最多只允许输入30个字)