图片框架:Fresco 的基本使用

来源:互联网 发布:手机简繁体转换软件 编辑:程序博客网 时间:2024/05/23 12:05

fresco是facebook推出的一款强大的android图片处理库,中文文档:http://www.fresco-cn.org/

网上有很多关于fresco的博客,中文文档也写的很详细了,在这里我只是介绍项目中我们可能多的用的功能。

引入fresco:

Android Studio 或者 Gradle

dependencies{

  compile 'com.facebook.fresco:fresco:0.9.0+'}
Eclipes ADT:
下载这个文件:https://github.com/facebook/fresco/releases/download/v0.9.0/frescolib-v0.9.0.zip
解压后,你会看到一个目录:frescolib,注意这个目录
1、从菜单文件(file)选择导入(import)
 2、展开Android,选择Existing android Code into Workspace 下一步
 3、浏览,选中刚才加压的文件中的frescolib目录。
 4、这5个项目应该都会被添加到工程:drawee,fbcore,fresco,,imagepipeline,imagepipeline-okhtttp.请确认钱4个目录一定是被选中的,点击完成
 5、右键、项目,选择属性,然后选择Android。
 6、点击右下角的Add按钮,选择fresco,点击OK,再点击OK
现在,fresco就导入你的项目中了,你可以开始编译了。如果编译不通过,可以尝试清理资源,或者重启Eclipse
1、fresco简单的加载网络图片:

如果你想下载显示一张图片,并且在加载过程中用占位图来显示它,就可以用SimpleDraweeView
在布局中添加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"
  />

代码中添加:
Uri uri = Uri.parse(图片地址);
SimpleDraweeView draweeView = (SimpleDraweeView) findViewById(R.id.my_image_view);
draweeView.setImageURI(uri);

剩下的,Fresco会替你完成:
显示占位图直到加载完成;
下载图片;
缓存图片;
图片不再显示时,从内存中移除;
等等等等。

Fresco 支持许多URI格式

类型 Scheme
远程图片 http://, https://
本地文件 file://
Content provider content://
asset目录下的资源 asset://
res目录下的资源 res://

没错,你完全可以把它当做ImageView控件来用!

注意

必须设置layout_width和layout_height
如果没有在XML中声明这两个属性,将无法正确加载图像。
wrap_content
SimpleDraweeView 不支持 wrap_content 属性。
所下载的图像可能和占位图尺寸不一致,如果设置出错图或者重试图的话,这些图的尺寸也可能和所下载的图尺寸不一致。
如果大小不一致,图像下载完之后,假设如果是wrap_content,View将会重新layout,改变大小和位置。这将会导致界面跳跃。


只有希望显示的固定宽高比时,可以使用wrap_content。
如果希望显示的图片保持一定宽高比例,如果 4:3,则在XML中:
<com.facebook.drawee.view.SimpleDraweeView
    android:id="@+id/my_image_view"
    android:layout_width="20dp"
    android:layout_height="wrap_content"/>
然后在代码中指定显示比例:
mSimpleDraweeView.setAspectRatio(1.33f);


2、进度条

在我们从网络加载一张图片时,往往可能因为图片的数量太多,或者网络太慢的原因而导致加载时间过长,这时候如果用户或者开发者想观察图片加载的进度,Fresco就提供这一便捷的特效。

构建hierarchy (层次)*
GenericDraweeHierarchy hierarchy=new GenericDraweeHierarchyBuilder(getResources())
                .setProgressBarImage(new ProgressBarDrawable()).build();
        simpleDraweeView.setHierarchy(hierarchy);
这样,在 Drawee 的底部就会有一个深蓝色的矩形进度条,当然进度条的样式你也可以自定义

setProgressBarImage(new ProgressBarDrawable()):表示设置图片进度条,样式给的是Fresco自带的,如果你嫌不好看也可以自定义。


3、渐进式加载

如果我们在的应用需要加载大量图片,加载时间过长,给用户的体验感不是特别好,这时候Fresco提供一种加载方式:渐进式JPEG加载,意思是在图片开始加载之后,图会从模糊到清晰渐渐呈现。会先加载一个模糊的图片呈现给用户,让用户知道这张图就快要加载好了,体验感非常不错。

ImageRequest request= ImageRequestBuilder.newBuilderWithSource(Uri)
                        .setProgressiveRenderingEnabled(true).build();
  PipelineDraweeController controller= (PipelineDraweeController) Fresco.newDraweeControllerBuilder().setImageRequest(request).
                        setOldController(simpleDraweeView.getController()).build();
                simpleDraweeView.setControll (controller);

newBuilderWithSource(Uri):里面放置你的图片地址

setProgressiveRenderingEnabled(true):设置是否渐进式加载,默认是false

Fresco.newDraweeControllerBuilder():设置一个新的控制器

setImageRequest(request):设置新的Request

setOldController(simpleDraweeView.getController()):设置要替换的旧控制器

 simpleDraweeView.setControll (controller):设置新的控制器


4、占位图

这个没什么好说的,直接上方法

图片没加载时的占位图

XML 中属性值: placeholderImage


设置加载失败占位图
XML 中属性值: failureImage


点击重新加载图,当图片加载失败时会显示这个图提示用户点击重新加载
在ControllerBuilder中设置     .setTapToRetryEnabled(true)
XML 中属性值: retryImage

这里要注意重新加载这个功能,如果图片加载失败它会显示你设置retryImage属性的图片,意思是让你点击重新加载,.setTapToRetryEnabled(true)需要在ControllerBuilder中设置这个方法,默认是false,如果你重新加载了4次还是失败,那么它才会显示加载失败的占位图,也就是placeholderImage这个属性设置的图片。


除了这些特效意外Fresco还有很多其他的特效,如缩放,旋转,GIF,监听下载事件,自定义View

详细参考中文文档:http://www.fresco-cn.org/

2 0
原创粉丝点击