3、Fresco网络加载图片框架使用步骤
(一)、
Fresco是Facebook最新推出的一款用于Android应用中展示图片的强大图片库,可以从网络、本地存储和本地资源中加载图片。它拥有三级缓存(网络缓存,内存,文件),其中的Drawees可以显示占位符,直到图片加载完成。
中文文档:http://www.fresco-cn.org/
//内存溢出泄露的区别,图片质量,三级缓存
(二)、
如果你想下载显示一张图片,并且在加载过程中用占位图来显示它,就可以用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"
/>
(三)Fresco支持许多URI格式
类型 Scheme
远程图片 http://, https://
本地文件 file://
Contentprovider content://
asset目录下的资源 asset://
res目录下的资源 res://
(四)注意!
必须设置layout_width和layout_height
如果没有在XML中声明这两个属性,将无法正确加载图像。
wrap_content
Drawees不支持 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);
(五)fresco各种特性
• 1、进度条
构建hierarchy (层次)*
GenericDraweeHierarchyhierarchy=new GenericDraweeHierarchyBuilder(getResources()).setProgressBarImage(newProgressBarDrawable()).build();simpleDraweeView.setHierarchy(hierarchy);
这样,在 Drawee 的底部就会有一个深蓝色的矩形进度条
图片: http://www.yztcedu.com/images/logo.png
• 2、渐进式JPEG图
Fresco支持渐进式的网络JPEG图。在开始加载之后,图会从模糊到清晰渐渐呈现。
ImageRequest request=ImageRequestBuilder.newBuilderWithSource(Uri)
setProgressiveRenderingEnabled(true).build();
PipelineDraweeControllercontroller=(PipelineDraweeController)Fresco.newDraweeControllerBuilder().setImageRequest(request).
setOldController(simpleDraweeView.getController()).build();simpleDraweeView.setController(controller);
图http://img5.imgtn.bdimg.com/it/u=1747776739,1699091026&fm=15&gp=0.jpg
• 3、占位图
Fresco支持渐进式的网络JPEG图。在开始加载之后,图会从模糊到清晰渐渐呈现。
ImageRequest request=ImageRequestBuilder.newBuilderWithSource(Uri)
.setProgressiveRenderingEnabled(true).build();
PipelineDraweeController controller=(PipelineDraweeController)Fresco.newDraweeControllerBuilder().setImageRequest(request).
setOldController(simpleDraweeView.getController()).build();
simpleDraweeView.setController(controller);
图http://img5.imgtn.bdimg.com/it/u=1747776739,1699091026&fm=15&gp=0.jpg
(六)Fresco其他重要属性介绍
• fresco:fadeDuration="300"// 淡入淡出的持续时间
• fresco:actualImageScaleType="focusCrop" // 实际图像的缩放类型
• fresco:placeholderImage="@color/wait_color" //占位图
• fresco:placeholderImageScaleType="fitCenter"//占位图的缩放类型
• fresco:failureImage="@drawable/error"//下载失败显示的图片
• fresco:failureImageScaleType="centerInside"//失败图的缩放类型
• fresco:retryImage="@drawable/retrying"
• //图片加载失败时显示,提示用户点击重新加载,重复加载4次还是没有加载出来的时候才会显示failureImage的图片
• fresco:retryImageScaleType="centerCrop"//重新加载的图片缩放类型
• fresco:progressBarImage="@drawable/progress_bar"//进度条图片
• fresco:progressBarImageScaleType="centerInside"
• fresco:progressBarAutoRotateInterval="1000"
• //进度图自动旋转间隔时间(单位:毫秒ms)
• fresco:backgroundImage="@color/blue"
• //背景图片,这里的背景图片首先被绘制
• fresco:overlayImage="@drawable/watermark"
• // 设置叠加图,在xml中只能设置一张叠加图片,如果需要多张图片的话,需要在java代码中设置哦
• fresco:pressedStateOverlayImage="@color/red"
• // 设置点击状态下的叠加图
• fresco:roundAsCircle="false"//设置为圆形图
• fresco:roundedCornerRadius="1dp"// 圆角半径
• 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"//边框颜色
• <com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/img_simDv_fenlei"
android:layout_width="80dp"
android:layout_height="80dp"
app:placeholderImage="@drawable/img_fenlei"
app:roundAsCircle="true"//设置成圆角图片
/>
• 代码中
• Stringuri=list.get(position).getThumb();
• //下载图片
viewHolder.imgSimDvFenlei.setImageURI(Uri.parse(uri));