一、Fresco的使用简单介绍

前言:第一次翻译,若有失误,请轻拍.......

Fresco 是facebook开源的Android图形加载库,github地址在  https://github.com/facebook/fresco

原文在http://frescolib.org/docs

Fresco入门


如果仅仅需要下载并显示图片,下载之前,显示一个默认图片,用SimpleDraweeView即可;

显示网络图片,当然需要网络的权限,在AndroidManifest.xml里添加如下权限:

<uses-permission android:name="android.permission.INTERNET"/>

在app启动代码处,且在调用setContentView()之前,初始化Fresco类:

Fresco.initialize(context);

在布局的xml中,需要在根节点添加Fresco的命名空间:

<!-- Any valid element will do here -->
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_height="match_parent"
    android:layout_width="match_parent">

然后把SimpleDraweeView添加到该布局中:

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="130dp"
    android:layout_height="130dp"
    fresco:placeholderImage="@drawable/my_drawable"
  />

该view的其他xml属性,参见Fresco drawees xml属性一览表

显示图片,在java代码中,只需要以下几行代码即可:

Uri uri = Uri.parse("http://frescolib.org/static/fresco-logo.png");
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

下载并替换默认图片的工作就交给Fresco了,大概的流程是:显示默认图片-下载图片-缓存-显示-移除;当View不再显示在屏幕中时,图片会从内存中清除。


概念

Drawees

Drawee是图片的渲染控件,有三部分组成,类似MVC框架.


DraweeView

继承自Android的View类.

我们应当在app的XML或java代码使用SimpleDraweeView类,调用其setImageURI方法,加载图片的URL。

DraweeView的其他xml属性介绍,后面再补充。


DraweeHierarchy

DraweeHierarchy是实质上渲染图片内容的类,可以把它当作MVC中的Model,并且我们可以通过它在java代码里设置图片的属性。


DraweeController

DraweeController类负责框架底层的图片加载,如果我们不仅仅是需要一个简单的URI来指定要显示的图片,那么我们就会用到这个类。


DraweeControllerBuilder

DraweeController一旦创建便不可更改,他们通过建造者模式创建。


Listener

只要用了builder指定了一个Listener,那么可以利用数据从服务器传输到客户端的传输比率。


The Image Pipeline

Fresco通过Image Pipeline(图形管道)完成图片的获取,不管是通过网络、本地文件、content provider 还是本地资源,它都把图片压缩并缓存到本地,并且把内存作为第二缓存存储着解压后的图片。

图形管道使用pinned purgeable技术将图片存储到java堆中,当管道的任务完成时,需要调用者 close图片。

SimpleDraweeView自动为我们做了这些,因此,这个View应该是我们的首选,只有很少的app需要直接的使用图形管道。


支持的URI类型

Fresco不支持相对路径,所有的URI必须包含scheme

如下的URI scheme是可以用的:

TypeSchemeFetch method used
File on networkhttp://, https://HttpURLConnection or network layer
File on devicefile://FileInputStream
Content providercontent://ContentResolver
Asset in appasset://AssetManager
Resource in appres://Resources.openRawResource


注意:只有图片资源可以被图形管道处理,其他的资源如字符串或xmlDrawable是不被支持的。定义在xml中的Drawable并不是一张图片,如果我们要显示xml drawable,那么应当设置其为placeholder,并且设置uri为null。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值