Android 强大的图片加载库Fresco,Fresco介绍

Fresco 中文版 v1.1 PDF下载:

http://yaphet.ctfile.com/fs/9Ah147781160

Fresco介绍:

Fresco是一个由facebook开源的强大的图片显示系统。Fresco考虑到了安卓中图片加载的几乎所有问题,可以加载来自网络、本地、以及应用资源文件中的图片,同时在图片加载完成之前会显示一个占位图片,提供二级缓存,还支持gif动态图。Fresco将图片放在一个特殊的内存区域,因此更容易避免OutOfMemoryError。这是以个以c++思维方式写出的java程序(Write code in Java, but think like C++ )。缺点:过于庞大。

关于 Fresco:

Fresco 是一个强大的图片加载组件。
Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。
Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。
Fresco 支持 Android2.3(API level 9) 及其以上系统。

内存管理:
解压后的图片,即Android中的Bitmap,占用大量的内存。大的内存占用势必引发更加频繁的GC。在5.0以下,GC将会显著地引发界面卡顿。
在5.0以下系统,Fresco将图片放到一个特别的内存区域。当然,在图片不显示的时候,占用的内存会自动被释放。这会使得APP更加流畅,减少因图片内存占用而引发的OOM。
Fresco 在低端机器上表现一样出色,你再也不用因图片内存占用而思前想后。

图片的渐进式呈现:
渐进式的JPEG图片格式已经流行数年了,渐进式图片格式先呈现大致的图片轮廓,然后随着图片下载的继续,呈现逐渐清晰的图片,这对于移动设备,尤其是慢网络有极大的利好,可带来更好的用户体验。
Android 本身的图片库不支持此格式,但是Fresco支持。使用时,和往常一样,仅仅需要提供一个图片的URI即可,剩下的事情,Fresco会处理。

Gif图和WebP格式:
是的,支持加载Gif图,支持WebP格式。

图像的呈现:
Fresco 的 Drawees 设计,带来一些有用的特性:
自定义居中焦点(对人脸等图片显示非常有帮助)
圆角图,当然圆圈也行。
下载失败之后,点击重现下载
自定义占位图,自定义overlay, 或者进度条
指定用户按压时的overlay

图像的加载
Fresco 的 image pipeline 设计,允许用户在多方面控制图片的加载:
为同一个图片指定不同的远程路径,或者使用已经存在本地缓存中的图片
先显示一个低解析度的图片,等高清图下载完之后再显示高清图
加载完成回调通知
对于本地图,如有EXIF缩略图,在大图加载完成之前,可先显示缩略图
缩放或者旋转图片
处理已下载的图片
WebP 支持

更多:
相关博客: Fresco的发布(https://code.facebook.com/posts/366199913563917)
下载 Fresco(http://fresco-cn.org/docs/download-fresco.html)科学上网
文档(http://fresco-cn.org/docs/index.html)
GitHub的源码(https://github.com/facebook/fresco)

引入Fresco:

1. Android Studio 或者 Gradle

dependencies {
compile 
'com.facebook.fresco:fresco:0.6.0+'
}
2. Intellij IDEA 或者 Maven

这是一个在 Intellij IDEA 的工程简单示例: https://github.com/liaohuqiu/fresco-demo-for-maven ,可供参考。
在这个 issue 解决之前,pom 中相关依赖缺少 type 字段,通过以下方式无法直接引入:

<dependency>
  <groupId>com.facebook.fresco</groupId>
  <artifactId>fresco</artifactId>
  <version>LATEST</version>
</dependency>
需要这样:
<!-- use this version, exclude all the other version from the other libraries. -->
<dependency>
    <groupId>com.android.support</groupId>
    <artifactId>support-v4</artifactId>
    <version>21.0.3</version>
    <type>aar</type>
</dependency>
<!-- begin of fresco -->
<dependency>
    <groupId>com.facebook.fresco</groupId>
    <artifactId>fresco</artifactId>
    <version>0.6.0</version>
    <type>aar</type>
    <exclusions>
        <exclusion>
            <groupId>com.android.support</groupId>
            <artifactId>support-v4</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.facebook.fresco</groupId>
            <artifactId>*</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.facebook.fresco</groupId>
    <artifactId>fbcore</artifactId>
    <type>aar</type>
    <version>0.6.0</version>
</dependency>
<dependency>
    <groupId>com.facebook.fresco</groupId>
    <artifactId>drawee</artifactId>
    <type>aar</type>
    <version>0.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.android.support</groupId>
            <artifactId>support-v4</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.facebook.fresco</groupId>
            <artifactId>fbcore</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<dependency>
    <groupId>com.facebook.fresco</groupId>
    <artifactId>imagepipeline</artifactId>
    <type>aar</type>
    <version>0.6.0</version>
    <exclusions>
        <exclusion>
            <groupId>com.android.support</groupId>
            <artifactId>support-v4</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.facebook.fresco</groupId>
            <artifactId>fbcore</artifactId>
        </exclusion>
    </exclusions>
</dependency>
<!-- end of fresco -->
很丑陋对吧,抱歉目前暂时只能这样,有更好的办法请一定告诉我。
刷新 Maven 工程,下载引用,下载完成之后,将:
gen-external-apklibs/com.facebook.fresco_imagepipeline_{版本号}/jni
目录下的三个文件夹:armeabi,armeabi-v7a,x86 这三个文件夹拷贝到 libs 文件夹下。

3. Eclipse ADT
首先,下载这个文件.
解压后,你会看到一个目录:frescolib,注意这个目录。
从菜单 “文件(File)”,选择导入(Import)
展开 Android, 选择 “Existing Android Code into Workspace”, 下一步。
浏览,选中刚才解压的的文件中的 frescolib 目录。
这5个项目应该都会被添加到工程: drawee, fbcore, fresco, imagepipeline, imagepipeline-okhttp。请确认前4个项目一定是被选中的。点击完成。
右键,项目,选择属性,然后选择 Android。
点击右下角的 Add 按钮,选择 fresco,点击 OK,再点击 OK。
现在,fresco 就导入到项目中了,你可以开始编译了。如果编译不通过,可以尝试清理资源,或者重启 Eclipse。
如果你想在网络层使用 OkHttp,请看这里.
如果 support-v4 包重复了,删掉 frescolib/imagepipeline/libs 下的即可。

建议尽早使用 Android Studio。
Fresco 是一个典型的Android Studio 项目。
如果想编译源码, 看demo项目,可以通过gradle或者Android Studio
一直以来,在国内更新Android SDK以及使用Android Studio导入项目时,都是一件麻烦的事情。
使用gradle 或者 Android Studio会遇到一些网络障碍。这些障碍,使用 红杏为开发者开放的免费的公益代理 可以解决。
另外对于NDK,因为Android Studio还支持不够。所以需要在命令行下预编译。

使用:

初始化

Fresco.initialize(context);
自定义命名空间
<!-- Any valid element will dohere -->
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:fresco="http://schemas.android.com/apk/res-auto"></span>
添加view
<span style="font-size:14px;"><com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="20dp"
fresco:placeholderImage="@drawable/my_drawable"/>
显示图片只需一行代码,Fresco 为你做其余的事情。图片将被下载,缓存,显示,同时在view退出屏幕的时候清理内存。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值