fresco使用笔记

关于 Fresco

Fresco 是一个强大的图片加载组件。

Fresco 中设计有一个叫做 image pipeline 的模块。它负责从网络,从本地文件系统,本地资源加载图片。为了最大限度节省空间和CPU时间,它含有3级缓存设计(2级内存,1级文件)。

Fresco 中设计有一个叫做 Drawees 模块,方便地显示loading图,当图片不再显示在屏幕上时,及时地释放内存和空间占用。

Fresco 支持 Android2.3(API level 9) 及其以上系统。

fresco中文API 


配置


fresco是facebook推出的一款强大的android图片处理库, github地址:https://github.com/facebook/fresco 里面有官方的使用配置文档,而且是中文的。

因为本人是在AndroidStudio上面进行项目开发,在此工具内配置方法是在app 的build.gradle文件中添加如下代码
dependencies{
compile'com.facebook.fresco:fresco:0.5.0+'
}
官方文档已经说fresco的类库发布到了Maven中央库,所以我们只需添加上面的代码再同步编译即可,如果无效,请在project的build.gradle文件中添加以下红色代码:
allprojects {
    repositories {
        jcenter()
        mavenCentral()
         }
    }
这样你就可以在你项目中使用fresco。
现在来说说最简单的使用:就是加载网络图片,
第一:在你的application类onCreate方法中添加
Fresco.initialize(instance);
第二:fresco是通过控件来实现它内部的优化缓存处理,我们使用的时候是通过控件来使用,具体如下
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/user_avator"
    android:layout_width="50dp"
    android:layout_height="50dp"
    fresco:roundAsCircle="true"
    fresco:roundedCornerRadius="180dp"
    fresco:actualImageScaleType="focusCrop"
    android:layout_centerVertical="true" />
大家可能看到,属性中存在fresco:开头的声明。这个是fresco的自定义属性,如果我们需要使用其自定义属性,必须在我们的xml根布局中添加声明/命名空间,下图红色部分
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:fresco="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">
第三:在代码中具体的使用
Uri uri = Uri.parse(http://b.hiphotos.baidu.com/image/pic/item/e78.jpg);
mAvatorImg.setImageURI(uri);


现在介绍一些fresco的属性,通过这些属性我们可以很方便的定制一些效果

<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"   // 不支持wrap_content 如果要设置宽高比, 需要在Java代码中指定setAspectRatio(1.33f);
    android:layout_height="20dp"    // 不支持wrap_content 
    fresco:fadeDuration="300"
    fresco:actualImageScaleType="focusCrop" // 设置图片缩放. 通常使用focusCrop,该属性值会通过算法把人头像放在中间
    fresco:placeholderImage="@color/wait_color" // 下载成功之前显示的图片
    fresco:placeholderImageScaleType="fitCenter" 
    fresco:failureImage="@drawable/error"// 加载失败的时候显示的图片
    fresco:failureImageScaleType="centerInside"
    fresco:retryImage="@drawable/retrying"// 加载失败,提示用户点击重新加载的图片(会覆盖failureImage的图片)
    fresco:retryImageScaleType="centerCrop"
    fresco:progressBarImage="@drawable/progress_bar"// 提示用户正在加载,和加载进度无关
    fresco:progressBarImageScaleType="centerInside"
    fresco:progressBarAutoRotateInterval="1000"
    fresco:backgroundImage="@color/blue"
    fresco:overlayImage="@drawable/watermark"
    fresco:pressedStateOverlayImage="@color/red"
    fresco:roundAsCircle="false"// 是不是设置圆圈
    fresco:roundedCornerRadius="1dp"// 圆角角度,180的时候会变成圆形图片
    fresco:roundTopLeft="true"
    fresco:roundTopRight="false"
    fresco:roundBottomLeft="false"
    fresco:roundBottomRight="true"
    fresco:roundWithOverlayColor="@color/corner_color"
    fresco:roundingBorderWidth="2dp"
    fresco:roundingBorderColor="@color/border_color"
  />

修改图片尺寸
Uri uri = "file:///mnt/sdcard/MyApp/myfile.jpg";
int width = 50, height = 50;
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setResizeOptions(new ResizeOptions(width, height))
    .build();
PipelineDraweeController controller = Fresco.newDraweeControllerBuilder()
    .setOldController(mDraweeView.getController())
    .setImageRequest(request)
    .build();
mSimpleDraweeView.setController(controller);


自动旋转
ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)
    .setAutoRotateEnabled(true)

    .build();



更详细的介绍 http://wiki.jikexueyuan.com/project/fresco/configuration.html


根据文档,所有的url都必须是绝对路径,文档给树了资源的scheme:


类型Scheme示例
远程图片http://, https://HttpURLConnection
本地文件file://FileInputStream
Content providercontent://ContentResolver
asset目录下的资源asset://AssetManager
res目录下的资源res://Resources.openRawResource

里面只说明了加载图片的scheme。并没有给出示例。

让我高了半天没成功。

最后在网上找到了资料,终于成功。


以 res/raw 文件夹为例

在res/raw 文件下放一个gif文件:web_loading.gif


Fresco适用的绝对url应该是这样的:

"res://com.xxx.yy/"+R.raw.web_loading

其中 R.raw.web_loading 是id,不是字符串。com.xxx.yy 是你的项目包名

因为res所有文件都会生成id。 所以使用 Fresco给出的 scheme  加上包名,再加上资源id。就可以定位到 raw下的文件

//======================   2015-05-19  更新   =======================

最近做项目有出现了以个问题.

当我加载 asset 目录下的 资源时,又出现了图片无法加载的问题. 

错误日志: E/JHEAD﹕ can't open '/loading2.gif'

 在网络上看到了一个解决办法 :   

将路径写成  : asset:///loading2.gif   

ok  ..解决..


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值