Fresco用法总结基础篇

来源:互联网 发布:字幕视频合并软件 编辑:程序博客网 时间:2024/05/16 09:31

Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。相对于ImageLoader,拥有更快的图片下载速度以及可以加载和显示gif图等诸多优势,是个很好的图片框架。PS:毕竟是facebook开源的,我说差也不会有人相信,还是夸夸吧!大笑

github地址:https://github.com/facebook/fresco

首先体验其最基本的用法:

1.导入 Android Studio 或者 Gradle

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. dependencies {  
  2.   compile 'com.facebook.fresco:fresco:0.9.0+'  
  3. }  

2、在xml中引入SimpleDraweeView
[html] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. <com.facebook.drawee.view.SimpleDraweeView  
  2.     android:id="@+id/image_view"  
  3.     android:layout_width="20dp"  
  4.     android:layout_height="20dp"  
  5.     fresco:placeholderImage="@drawable/my_drawable"  
  6.   />  
注意:1、在SimpleDraweeView的父控件或者根节点中配置xmlns:fresco="http://schemas.android.com/apk/res-auto";

2、配置网络权限

3、在Java代码中开始加载图片
[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. Uri uri = Uri.parse("https://raw.githubusercontent.com/facebook/fresco/gh-pages/static/fresco-logo.png");  
  2. SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);  
  3. draweeView.setImageURI(uri);  

OK,到这儿已经初步学会了该框架的使用。

接下来详细研究其用法:


URIs的使用:

类型Scheme示例远程图片http://, https://HttpURLConnection 或者参考 使用其他网络加载方案本地文件file://FileInputStreamContent providercontent://ContentResolverasset目录下的资源asset://AssetManagerres目录下的资源res://Resources.openRawResource

res 示例:Uri uri = Uri.parse("res://包名(实际可以是任何字符串甚至留空)/" + R.drawable.ic_launcher);

注意:Fresco 不支持 相对路径的URI. 所有的URI都必须是绝对路径,并且带上该URI的scheme。


在XML中使用SimpleDraweeView:

给出一个完整的示例:

[html] view plain copy
在CODE上查看代码片派生到我的代码片
  1. <com.facebook.drawee.view.SimpleDraweeView  
  2.     android:id="@+id/my_image_view"  
  3.     android:layout_width="20dp"  
  4.     android:layout_height="20dp"  
  5.     fresco:fadeDuration="300"//渐进时间  
  6.     fresco:actualImageScaleType="focusCrop"  
  7.     fresco:placeholderImage="@color/wait_color"  
  8.     fresco:placeholderImageScaleType="fitCenter"  
  9.     fresco:failureImage="@drawable/error"//失败时显示的图片  
  10.     fresco:failureImageScaleType="centerInside"//失败图片的显示方式  
  11.     fresco:retryImage="@drawable/retrying"//重试图  
  12.     fresco:retryImageScaleType="centerCrop"//重试图显示方式  
  13.     fresco:progressBarImage="@drawable/progress_bar"  
  14.     fresco:progressBarImageScaleType="centerInside"  
  15.     fresco:progressBarAutoRotateInterval="1000"  
  16.     fresco:backgroundImage="@color/blue"  
  17.     fresco:overlayImage="@drawable/watermark"  
  18.     fresco:pressedStateOverlayImage="@color/red"  
  19.     fresco:roundAsCircle="false"  
  20.     fresco:roundedCornerRadius="1dp"  
  21.     fresco:roundTopLeft="true"  
  22.     fresco:roundTopRight="false"  
  23.     fresco:roundBottomLeft="false"  
  24.     fresco:roundBottomRight="true"  
  25.     fresco:roundWithOverlayColor="@color/corner_color"  
  26.     fresco:roundingBorderWidth="2dp"  
  27.     fresco:roundingBorderColor="@color/border_color"  
  28.   />  
说明:必须声明 android:layout_width 和 android:layout_height,否则将无法正确加载图像,另外不支持 wrap_content 属性,但也有例外的时候,如果想固定控件的宽高比,则可以使用wrap_content,并通过在xml代码中设置fresco:viewAspectRatio="小数"或者在Java代码中设置mSimpleDraweeView.setAspectRatio(1.33f);即可。

在Java中自定义显示图

一般情况下,在XML设置显示效果即可, 如果想更多定制化,可以这样:

创建一个 builder 然后设置给 SimpleDraweeView:

[java] view plain copy
 在CODE上查看代码片派生到我的代码片
  1. List<Drawable> backgroundsList;  
  2. List<Drawable> overlaysList;  
  3. GenericDraweeHierarchyBuilder builder =  
  4.     new GenericDraweeHierarchyBuilder(getResources());  
  5. GenericDraweeHierarchy hierarchy = builder  
  6.     .setFadeDuration(300)  
  7.     .setPlaceholderImage(new MyCustomDrawable())  
  8.     .setBackgrounds(backgroundList)  
  9.     .setOverlays(overlaysList)  
  10.     .build();  
  11. mSimpleDraweeView.setHierarchy(hierarchy);  
注意:请不要多次调用setHierarchy,即使这个View是可回收的。创建 DraweeHierarchy 的较为耗时的一个过程,应该多次利用。

修改 DraweeHierarchy

DraweeHierarchy 的一些属性可以在运行时改变。

要改变这些属性,首先获取一个引用:

GenericDraweeHierarchy hierarchy = mSimpleDraweeView.getHierarchy();

修改占位图

修改占位图为资源id:hierarchy.setPlaceholderImage(R.drawable.placeholderId);

或者修改为一个 Drawable:Drawable drawable; hierarchy.setPlaceholderImage(drawable);


改变图像的显示

修改缩放类型:

hierarchy.setActualImageScaleType(ScalingUtils.ScaleType.CENTER_INSIDE);

如果你选择缩放类型为 focusCrop,需要指定一个居中点:hierarchy.setActualImageFocusPoint(point);


你可以为图像添加一个 color filter:

ColorFilter filter;

// 创建filter

hierarchy.setActualImageColorFilter(filter);


圆角

除了圆角显示方式(原来为圆角的不能修改为圆圈,反之亦然),其他圆角相关的呈现参数, 具体参见这里 是可以动态修改的。

如下: 获取DraweeHierarchy的圆角显示参数,修改圆角半径为10。

RoundingParams roundingParams = hierarchy.getRoundingParams();

roundingParams.setCornersRadius(10);

hierarchy.setRoundingParams(roundingParams);


OK,到此就已经掌握了Fresco的基础用法,接一下的一篇会研究Fresco的一些高阶功能及技巧。

0 0
原创粉丝点击