Fresco用法大全

公司换Fresco框架,叫我负责去调研和封装,查了Fresco的官方中文文档总结如下,

1,整体框架图



DraweeView

Xml中不支持wrap_content属性,但是使用viewAspectRatio

固定宽高比可以使用wrap_content

使用:

mSimpleDraweeView.setImageURI(uri);


代码中设置

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

GenericDraweeHierarchyBuilder builder =

new GenericDraweeHierarchyBuilder(getResources());

 

GenericDraweeHierarchy hierarchy = builder

    .setFadeDuration(300)

    .setPlaceholderImage(new MyCustomDrawable())

    .setBackgrounds(backgroundList)

    .setOverlays(overlaysList)

.build();

mSimpleDraweeView.setHierarchy(hierarchy);

注意点:

1,创建 DraweeHierarchy 耗时,同一个View不要多次调用setHierarchy一个DraweeHierarchy 不可以被多个 View 共用

2,可以运行时修改 DraweeHierarchy的属性(比如占位图,失败图之类的)

3,进度条hierarchy .setProgressBarImage(new ProgressBarDrawable()),

4,圆角显示方式hierarchy.setRoundingParams(roundingParams);

 

ControllerBuilder对加载图片更多控制

DraweeController controller = Fresco.newDraweeControllerBuilder()

    .setUri(uri)

    .setTapToRetryEnabled(true)//点击重新加载

    .setOldController(mSimpleDraweeView.getController())

    .setControllerListener(listener)

    .build();

mSimpleDraweeView.setController(controller);

注意:指定一个新的controller的时候,使用setOldController,这可节省不必要的内存分配

controller.setControllerListener(listener):监听图片下载事件,可处理加载完和加载中加载失败的逻辑,这里无法修改图片修改图片可以在后处理器Postprocessor

 

ImageRequest request = ImageRequestBuilder.newBuilderWithSource(uri)

    .setPostprocessor(myPostprocessor)

.build();

Postprocessor :重写process方法,可以对bitmap做出操作

不要重写多于 1 个的 process 方法。这么做可能造成无法预测的结果。

 

controller.setImageRequest(request);

process(Bitmap bitmap) ,

1,图片在进入后处理器(postprocessor)的图片是原图的一个完整拷贝,原来图片不受修改的影响。

2,后处理器现在不支持 动图加载 

3,在开始一个图片显示时,即使是反复显示同一个图片,在每次进行显示时,都需要指定后处理器。对于同一个图片,每次显示可以使用不同的后处理器

 

process(Bitmap destBitmap, Bitmap sourceBitmap)

1,源图片和目标图片具有相同的大小。

2,不要修改源图片。在未来的版本中这会抛出一个异常。

3,不要保存对任何一个图片的引用。它们的内存会由 image pipeline 进行管理,目标图片会在 Drawee  DataSource 中正常地销毁。

 

process(Bitmap sourceBitmap,PlatformBitmapFactory bitmapFactory)

1,如果处理后的图片大小需要和原图片不同可以使用这个

2,不要使用 Android 中 Bitmap.createBitmap() 方法,它会在 Java 堆内存中产生一个 bitmap 对象。

 

渐进式加载

request.setProgressiveRenderingEnabled(true)

 

动画支持: 支持GIF 和 WebP

controller.setAutoPlayAnimations(true)//图片下载完自动播放,view移除,停止播放

1更多情况可设置下载监听灵活运用

controller .setControllerListener(controllerListener)

1,动画现在还不支持 postprocessors

 

先后分别显示两个分辨率的图(先显示低分辨率的图后高分辨率的图)

.setLowResImageRequest(ImageRequest.fromUri(lowResUri))

.setImageRequest(ImageRequest.fromUri(highResUri))

注意:动图无法在低分辨率那一层显示。

 

加载最先可用的图片

Uri uri1, uri2;

ImageRequest request = ImageRequest.fromUri(uri1);

ImageRequest request2 = ImageRequest.fromUri(uri2);

ImageRequest[] requests = { request1, request2 };

controller.setFirstAvailableImageRequests(requests)

按顺序去加载,第一个加载到的显示

 

缩放和旋转图片

Scaling 是一种画布操作,通常是由硬件加速的。图片实际大小保持不变,它只不过在绘制时被放大或缩小。

Resizing 是一种软件执行的管道操作。它返回一张新的,尺寸不同的图片。

Downsampling 同样是软件实现的管道操作。它不是创建一张新的图片,而是在解码时改变图片的大小。

 

ImageRequestBuilder配置更多的request设置

ImageRequest request = ImageRequestBuilder

    .newBuilderWithSource(uri)

    .setImageDecodeOptions(decodeOptions)

    .setAutoRotateEnabled(true)

    .setLocalThumbnailPreviewsEnabled(true)

    .setLowestPermittedRequestLevel(RequestLevel.FULL_FETCH)

    .setProgressiveRenderingEnabled(false)

    .setResizeOptions(new ResizeOptions(width, height))

.build();

· uri - 唯一的必选的成员. 参考 支持的URIs

· autoRotateEnabled - 是否支持自动旋转.

· progressiveEnabled - 是否支持渐进式加载.

· postprocessor - 后处理器(postprocess).

· resizeOptions - 图片缩放选项,用前请先阅读缩放和旋转.



阅读更多
文章标签: Fresco
个人分类: Android端总结
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭