背景
facebook开源的一个强大的图片加载组件。使用之后,不需要关心图片的加载和显示这些繁琐的事情,支持Android2.3以上版本.
依赖
build.gradle 文件添加
//fresco
compile 'com.facebook.fresco:fresco:0.12.0'
// 支持 GIF 动图,需要添加
compile 'com.facebook.fresco:animated-gif:0.12.0'
初始化
使用fresco之前必须先初始化,只需要调用Fresco.initialize一次即可完成初始化,一般在Application中初始化。
public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
Fresco.initialize(this);
}
}
使用
简单的使用直接用fresco 的 SimpleDraweeView 即可,其有两种运用方式,一种直接在xml中配置,一种的java代码中设置。
xml的使用
<com.facebook.drawee.view.SimpleDraweeView
android:id="@+id/my_image_view"
android:layout_width="20dp"
android:layout_height="20dp"
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"
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"
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"
/>
- fadeDuration: 动画持续时间,默认300ms
- actualImageScaleType: 要显示的图片的scaleType,默认CENTER_CROP
- placeholderImage: 加载中占位图
- setPlaceholderImageScaleType:加载中占位图scaleType.默认CENTER_INSIDE
- failureImage:加载失败的图片。
- failureImageScaleType:加载失败的图caleType.默认CENTER_INSIDE
- retryImage:点击重新加载图。在加载失败时,可以设置点击重新加载。这时提供一个图片,加载失败时,会显示这个图片(而不是失败提示图片),提示用户点击重试。需在在ControllerBuilder 中如下设置:.setTapToRetryEnabled(true)
- retryImageScaleType:重新加载图caleType。
- progressBarImage:加载进度图。
- progressBarImageScaleType:加载进度图caleType.默认CENTER_INSIDE
- backgroundImage:设置背景图,当指定一个背景图列表的时候,列表中的第一项会被首先绘制,绘制在最下层,然后依次往上绘制。背景图片不支持缩放类型
- overlayImage:设置叠加图,当指定的叠加图是一个列表的时候,列表第一个元素会被先绘制,最后一个元素最后被绘制到最上层,不支持各种缩放类型
- pressedStateOverlayImage:设置按压状态下的叠加图
- roundAsCircle:true or false,是否圆圈。
- roundedCornerRadius:设置圆角.
- roundTopLeft: 以下4个角是否开启圆角。
- roundTopRight
- roundBottomLeft:
- roundBottomRight:
- roundWithOverlayColor:圆角和边框之间的颜色
- roundingBorderWidth: 边框宽度
- roundingBorderColor:边框颜色.
设置显示图片:
mDraweeView.setImageURI(URL);
java代码设置
一般情况下,在XML设置显示效果即可, 如果想更多定制化,可以创建一个 builder 然后设置给 DraweeView:
GenericDraweeHierarchyBuilder builder = new GenericDraweeHierarchyBuilder(getResources());
GenericDraweeHierarchy hierarchy = builder
.setFadeDuration(300)
.setActualImageScaleType(ScalingUtils.ScaleType.FOCUS_CROP)
.setPlaceholderImage(R.drawable.default_avatar)
.setPlaceholderImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
.setFailureImage(R.drawable.image_error)
.setFailureImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
.setRetryImage(R.drawable.fallback_nodata)
.setRetryImageScaleType(ScalingUtils.ScaleType.FIT_CENTER)
.setPressedStateOverlay(getResources().getDrawable(R.drawable.communication))
.build();
/**
* SimpleDraweeView 有两个方法可以设置所要加载显示图片,简单的方法就是setImageURI。
* 如果你需要对加载显示的图片做更多的控制和定制,那就需要用到DraweeController
*
*/
DraweeController controller = Fresco.newDraweeControllerBuilder()
.setUri(URL)
.setTapToRetryEnabled(true)
.setOldController(mDraweeView1.getController())
.setControllerListener(listener)
.build();
mDraweeView1.setHierarchy(hierarchy);
mDraweeView1.setController(controller);
设置点击重新加载图 .setTapToRetryEnabled(true)
图片下载监听事件
private ControllerListener listener = new BaseControllerListener<ImageInfo>(){
@Override
public void onFinalImageSet(String id, ImageInfo imageInfo, Animatable animatable) {
if (imageInfo == null) {
return;
}
QualityInfo qualityInfo = imageInfo.getQualityInfo();
LogHelper.d("Final image received! " +
"Size %d x %d" + imageInfo.getWidth()+" "+imageInfo.getHeight()+
"Quality level %d "+qualityInfo.getQuality()+" good enough: %s "+qualityInfo.isOfGoodEnoughQuality()+ "full quality: %s "+qualityInfo.isOfFullQuality());
}
@Override
public void onIntermediateImageSet(String id, ImageInfo imageInfo) {
super.onIntermediateImageSet(id, imageInfo);
}
@Override
public void onFailure(String id, Throwable throwable) {
super.onFailure(id, throwable);
}
};
- onFinalImageSet:加载成功后触发
- onFailure :加载失败后触发
- onIntermediateImageSet: 渐进式JPEG解码后回调.